commit:     b1c3422f453921e838d419640fe39144dbf8d13d
Author:     Jason Zaman <jason <AT> perfinion <DOT> com>
AuthorDate: Sun Sep 17 13:15:13 2017 +0000
Commit:     William Hubbs <williamh <AT> gentoo <DOT> org>
CommitDate: Sun Sep 17 16:40:07 2017 +0000
URL:        https://gitweb.gentoo.org/proj/openrc.git/commit/?id=b1c3422f

selinux: use openrc contexts path to get contexts

The minimum requirement for libselinux is now >=2.6
The refpolicy and the gentoo policy contain the
contexts since version 2.20170204-r4

 src/rc/rc-selinux.c | 23 +++++++++++++++++++++--
 1 file changed, 21 insertions(+), 2 deletions(-)

diff --git a/src/rc/rc-selinux.c b/src/rc/rc-selinux.c
index 2eb631a6..514ca5e5 100644
--- a/src/rc/rc-selinux.c
+++ b/src/rc/rc-selinux.c
@@ -39,7 +39,6 @@
 #include "rc-selinux.h"
 
 /* the context files for selinux */
-#define RUN_INIT_FILE "run_init_type"
 #define INITRC_FILE "initrc_context"
 
 #ifdef HAVE_AUDIT
@@ -299,6 +298,26 @@ static int read_context_file(const char *filename, char 
**context)
        return ret;
 }
 
+static int read_run_init_context(char **context)
+{
+       int ret = -1;
+       RC_STRINGLIST *list;
+       char *value = NULL;
+
+       list = rc_config_list(selinux_openrc_contexts_path());
+       if (list == NULL)
+               return ret;
+
+       value = rc_config_value(list, "run_init");
+       if (value != NULL && strlen(value) > 0) {
+               *context = xstrdup(value);
+               ret = 0;
+       }
+
+       rc_stringlist_free(list);
+       return ret;
+}
+
 void selinux_setup(char **argv)
 {
        char *new_context = NULL;
@@ -312,7 +331,7 @@ void selinux_setup(char **argv)
                return;
        }
 
-       if (read_context_file(RUN_INIT_FILE, &run_init_t) != 0) {
+       if (read_run_init_context(&run_init_t) != 0) {
                /* assume a reasonable default, rather than bailing out */
                run_init_t = xstrdup("run_init_t");
                ewarn("Assuming SELinux run_init type is %s", run_init_t);

Reply via email to