diff options
| author | Jason Zaman <jason@perfinion.com> | 2014-07-17 00:46:25 +0400 | 
|---|---|---|
| committer | William Hubbs <w.d.hubbs@gmail.com> | 2014-07-16 17:59:25 -0500 | 
| commit | 89907b60bac51db2cda1afe4555676577ef498a8 (patch) | |
| tree | f687f95517cdd7fe7c6f9e6eeb8c62eafcc27f27 /src/rc | |
| parent | a94a9740d545817294cc431180db0f22fc923b13 (diff) | |
| download | openrc-89907b60bac51db2cda1afe4555676577ef498a8.tar.xz | |
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
Diffstat (limited to 'src/rc')
| -rw-r--r-- | src/rc/rc-selinux.c | 41 | ||||
| -rw-r--r-- | src/rc/rc-selinux.h | 2 | ||||
| -rw-r--r-- | 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 7c1ee80d..eae030d0 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 69624b39..8cf73b05 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 981e6067..03d851e6 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; | 
