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