commit:     89907b60bac51db2cda1afe4555676577ef498a8
Author:     Jason Zaman <jason <AT> perfinion <DOT> com>
AuthorDate: Wed Jul 16 20:46:25 2014 +0000
Commit:     William Hubbs <williamh <AT> gentoo <DOT> org>
CommitDate: Wed Jul 16 22:59:25 2014 +0000
URL:        
http://git.overlays.gentoo.org/gitweb/?p=proj/openrc.git;a=commit;h=89907b60

move the selinux_setup function into rc-selinux

X-Gentoo-Bug: 516956
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=516956

---
 src/rc/rc-selinux.c | 41 +++++++++++++++++++++++++++++++++++++++++
 src/rc/rc-selinux.h |  2 ++
 src/rc/runscript.c  | 45 +++++----------------------------------------
 3 files changed, 48 insertions(+), 40 deletions(-)

diff --git a/src/rc/rc-selinux.c b/src/rc/rc-selinux.c
index 7c1ee80..eae030d 100644
--- a/src/rc/rc-selinux.c
+++ b/src/rc/rc-selinux.c
@@ -30,14 +30,24 @@
 
 #include <stddef.h>
 #include <errno.h>
+#include <dlfcn.h>
 
 #include <sys/stat.h>
 
 #include <selinux/selinux.h>
 #include <selinux/label.h>
 
+#include "einfo.h"
+#include "rc.h"
+#include "rc-misc.h"
+#include "rc-plugin.h"
 #include "rc-selinux.h"
 
+#define SELINUX_LIB     RC_LIBDIR "/runscript_selinux.so"
+
+static void (*selinux_run_init_old) (void);
+static void (*selinux_run_init_new) (int argc, char **argv);
+
 static struct selabel_handle *hnd = NULL;
 
 int selinux_util_label(const char *path)
@@ -121,3 +131,34 @@ int selinux_util_close(void)
 
        return 0;
 }
+
+void selinux_setup(int argc, char **argv)
+{
+       void *lib_handle = NULL;
+
+       if (!exists(SELINUX_LIB))
+               return;
+
+       lib_handle = dlopen(SELINUX_LIB, RTLD_NOW | RTLD_GLOBAL);
+       if (!lib_handle) {
+               eerror("dlopen: %s", dlerror());
+               return;
+       }
+
+       selinux_run_init_old = (void (*)(void))
+           dlfunc(lib_handle, "selinux_runscript");
+       selinux_run_init_new = (void (*)(int, char **))
+           dlfunc(lib_handle, "selinux_runscript2");
+
+       /* Use new run_init if it exists, else fall back to old */
+       if (selinux_run_init_new)
+               selinux_run_init_new(argc, argv);
+       else if (selinux_run_init_old)
+               selinux_run_init_old();
+       else
+               /* This shouldnt happen... probably corrupt lib */
+               eerrorx
+                   ("run_init is missing from runscript_selinux.so!");
+
+       dlclose(lib_handle);
+}

diff --git a/src/rc/rc-selinux.h b/src/rc/rc-selinux.h
index 69624b3..8cf73b0 100644
--- a/src/rc/rc-selinux.h
+++ b/src/rc/rc-selinux.h
@@ -30,4 +30,6 @@ int selinux_util_open(void);
 int selinux_util_label(const char *path);
 int selinux_util_close(void);
 
+void selinux_setup(int argc, char **argv);
+
 #endif

diff --git a/src/rc/runscript.c b/src/rc/runscript.c
index 981e606..03d851e 100644
--- a/src/rc/runscript.c
+++ b/src/rc/runscript.c
@@ -36,7 +36,6 @@
 #include <sys/wait.h>
 
 #include <ctype.h>
-#include <dlfcn.h>
 #include <errno.h>
 #include <fcntl.h>
 #include <fnmatch.h>
@@ -66,7 +65,9 @@
 #include "rc-misc.h"
 #include "rc-plugin.h"
 
-#define SELINUX_LIB     RC_LIBDIR "/runscript_selinux.so"
+#ifdef HAVE_SELINUX
+#include "rc-selinux.h"
+#endif
 
 #define PREFIX_LOCK    RC_SVCDIR "/prefix.lock"
 
@@ -88,42 +89,6 @@ static int signal_pipe[2] = { -1, -1 };
 static RC_STRINGLIST *types_b, *types_n, *types_nu, *types_nua, *types_m;
 static RC_STRINGLIST *types_mua = NULL;
 
-#ifdef __linux__
-static void (*selinux_run_init_old)(void);
-static void (*selinux_run_init_new)(int argc, char **argv);
-
-static void
-setup_selinux(int argc, char **argv)
-{
-       void *lib_handle = NULL;
-
-       if (! exists(SELINUX_LIB))
-               return;
-
-       lib_handle = dlopen(SELINUX_LIB, RTLD_NOW | RTLD_GLOBAL);
-       if (! lib_handle) {
-               eerror("dlopen: %s", dlerror());
-               return;
-       }
-
-       selinux_run_init_old = (void (*)(void))
-           dlfunc(lib_handle, "selinux_runscript");
-       selinux_run_init_new = (void (*)(int, char **))
-           dlfunc(lib_handle, "selinux_runscript2");
-
-       /* Use new run_init if it exists, else fall back to old */
-       if (selinux_run_init_new)
-               selinux_run_init_new(argc, argv);
-       else if (selinux_run_init_old)
-               selinux_run_init_old();
-       else
-               /* This shouldnt happen... probably corrupt lib */
-               eerrorx("run_init is missing from runscript_selinux.so!");
-
-       dlclose(lib_handle);
-}
-#endif
-
 static void
 handle_signal(int sig)
 {
@@ -1224,9 +1189,9 @@ openrc_run(int argc, char **argv)
                eprefix(prefix);
        }
 
-#ifdef __linux__
+#ifdef HAVE_SELINUX
        /* Ok, we are ready to go, so setup selinux if applicable */
-       setup_selinux(argc, argv);
+       selinux_setup(argc, argv);
 #endif
 
        deps = true;

Reply via email to