393955
From 9bf63bb85d4d2cab73181ee1d8d0b07961ce4a80 Mon Sep 17 00:00:00 2001
393955
From: Vit Mojzis <vmojzis@redhat.com>
393955
Date: Thu, 17 Feb 2022 14:14:15 +0100
393955
Subject: [PATCH] libselinux: Strip spaces before values in config
393955
393955
Spaces before values in /etc/selinux/config should be ignored just as
393955
spaces after them are.
393955
393955
E.g. "SELINUXTYPE= targeted" should be a valid value.
393955
393955
Fixes:
393955
   # sed -i 's/^SELINUXTYPE=/SELINUXTYPE= /g' /etc/selinux/config
393955
   # dnf install <any_package>
393955
   ...
393955
   RPM: error: selabel_open: (/etc/selinux/ targeted/contexts/files/file_contexts) No such file or directory
393955
   RPM: error: Plugin selinux: hook tsm_pre failed
393955
   ...
393955
   Error: Could not run transaction.
393955
393955
Signed-off-by: Vit Mojzis <vmojzis@redhat.com>
393955
---
393955
 libselinux/src/selinux_config.c | 17 +++++++++++++----
393955
 1 file changed, 13 insertions(+), 4 deletions(-)
393955
393955
diff --git a/libselinux/src/selinux_config.c b/libselinux/src/selinux_config.c
393955
index b06cb63b..0892b87c 100644
393955
--- a/libselinux/src/selinux_config.c
393955
+++ b/libselinux/src/selinux_config.c
393955
@@ -91,6 +91,7 @@ int selinux_getenforcemode(int *enforce)
393955
 	FILE *cfg = fopen(SELINUXCONFIG, "re");
393955
 	if (cfg) {
393955
 		char *buf;
393955
+		char *tag;
393955
 		int len = sizeof(SELINUXTAG) - 1;
393955
 		buf = malloc(selinux_page_size);
393955
 		if (!buf) {
393955
@@ -100,21 +101,24 @@ int selinux_getenforcemode(int *enforce)
393955
 		while (fgets_unlocked(buf, selinux_page_size, cfg)) {
393955
 			if (strncmp(buf, SELINUXTAG, len))
393955
 				continue;
393955
+			tag = buf+len;
393955
+			while (isspace(*tag))
393955
+				tag++;
393955
 			if (!strncasecmp
393955
-			    (buf + len, "enforcing", sizeof("enforcing") - 1)) {
393955
+			    (tag, "enforcing", sizeof("enforcing") - 1)) {
393955
 				*enforce = 1;
393955
 				ret = 0;
393955
 				break;
393955
 			} else
393955
 			    if (!strncasecmp
393955
-				(buf + len, "permissive",
393955
+				(tag, "permissive",
393955
 				 sizeof("permissive") - 1)) {
393955
 				*enforce = 0;
393955
 				ret = 0;
393955
 				break;
393955
 			} else
393955
 			    if (!strncasecmp
393955
-				(buf + len, "disabled",
393955
+				(tag, "disabled",
393955
 				 sizeof("disabled") - 1)) {
393955
 				*enforce = -1;
393955
 				ret = 0;
393955
@@ -177,7 +181,10 @@ static void init_selinux_config(void)
393955
 
393955
 			if (!strncasecmp(buf_p, SELINUXTYPETAG,
393955
 					 sizeof(SELINUXTYPETAG) - 1)) {
393955
-				type = strdup(buf_p + sizeof(SELINUXTYPETAG) - 1);
393955
+				buf_p += sizeof(SELINUXTYPETAG) - 1;
393955
+				while (isspace(*buf_p))
393955
+					buf_p++;
393955
+				type = strdup(buf_p);
393955
 				if (!type)
393955
 					return;
393955
 				end = type + strlen(type) - 1;
393955
@@ -199,6 +206,8 @@ static void init_selinux_config(void)
393955
 			} else if (!strncmp(buf_p, REQUIRESEUSERS,
393955
 					    sizeof(REQUIRESEUSERS) - 1)) {
393955
 				value = buf_p + sizeof(REQUIRESEUSERS) - 1;
393955
+				while (isspace(*value))
393955
+					value++;
393955
 				intptr = &require_seusers;
393955
 			} else {
393955
 				continue;
393955
-- 
393955
2.35.3
393955