* bus/selinux.c (bus_selinux_init): Split into two functions,
bus_selinux_pre_init and bus_selinux_post_init.
(bus_selinux_pre_init): Just determine whether SELinux is
enabled.
(bus_selinux_post_init): Do everything else.
* bus/main.c (main): Call bus_selinux_pre_init before parsing
config file, and bus_selinux_post_init after. This ensures that
we don't lose the policyreload notification thread that
bus_selinux_init created before forking previously.
* bus/test-main.c (test_pre_hook): Update for split.
+2004-11-02 Colin Walters <walters@verbum.org>
+
+ * bus/selinux.c (bus_selinux_init): Split into two functions,
+ bus_selinux_pre_init and bus_selinux_post_init.
+ (bus_selinux_pre_init): Just determine whether SELinux is
+ enabled.
+ (bus_selinux_post_init): Do everything else.
+
+ * bus/main.c (main): Call bus_selinux_pre_init before parsing
+ config file, and bus_selinux_post_init after. This ensures that
+ we don't lose the policyreload notification thread that
+ bus_selinux_init created before forking previously.
+
+ * bus/test-main.c (test_pre_hook): Update for split.
+
2004-10-31 Owen Fraser-Green <owen@discobabe.net>
Patch from Johan Fischer <linux@fischaz.com>
2004-10-31 Owen Fraser-Green <owen@discobabe.net>
Patch from Johan Fischer <linux@fischaz.com>
}
_dbus_string_free (&pid_fd);
}
_dbus_string_free (&pid_fd);
- if (!bus_selinux_init ())
+ if (!bus_selinux_pre_init ())
- _dbus_warn ("SELinux initialization failed\n");
+ _dbus_warn ("SELinux pre-initialization failed\n");
+ if (!bus_selinux_full_init ())
+ {
+ _dbus_warn ("SELinux initialization failed\n");
+ exit (1);
+ }
+
setup_reload_pipe (bus_context_get_loop (context));
_dbus_set_signal_handler (SIGHUP, signal_handler);
setup_reload_pipe (bus_context_get_loop (context));
_dbus_set_signal_handler (SIGHUP, signal_handler);
- * Initialize the user space access vector cache (AVC) for D-BUS and set up
- * logging callbacks.
+ * Do early initialization; determine whether SELinux is enabled.
+bus_selinux_pre_init (void)
{
#ifdef HAVE_SELINUX
int r;
{
#ifdef HAVE_SELINUX
int r;
}
selinux_enabled = r != 0;
}
selinux_enabled = r != 0;
+ return TRUE;
+#else
+ return TRUE;
+#endif
+}
+
+/**
+ * Initialize the user space access vector cache (AVC) for D-BUS and set up
+ * logging callbacks.
+ */
+dbus_bool_t
+bus_selinux_full_init (void)
+{
+#ifdef HAVE_SELINUX
+ int r;
+ char *bus_context;
+ _dbus_assert (bus_sid == SECSID_WILD);
+
if (!selinux_enabled)
{
_dbus_verbose ("SELinux not enabled in this kernel.\n");
if (!selinux_enabled)
{
_dbus_verbose ("SELinux not enabled in this kernel.\n");
#include <dbus/dbus-connection.h>
#include "services.h"
#include <dbus/dbus-connection.h>
#include "services.h"
-dbus_bool_t bus_selinux_init (void);
+dbus_bool_t bus_selinux_pre_init (void);
+dbus_bool_t bus_selinux_full_init(void);
void bus_selinux_shutdown (void);
dbus_bool_t bus_selinux_enabled (void);
void bus_selinux_shutdown (void);
dbus_bool_t bus_selinux_enabled (void);
- if (_dbus_getenv ("DBUS_TEST_SELINUX") && !bus_selinux_init ())
+ if (_dbus_getenv ("DBUS_TEST_SELINUX")
+ && !bus_selinux_pre_init ()
+ && !bus_selinux_full_init ())
die ("could not init selinux support");
}
die ("could not init selinux support");
}