diff options
-rw-r--r-- | main.c | 28 | ||||
-rw-r--r-- | manager.c | 13 |
2 files changed, 28 insertions, 13 deletions
@@ -25,9 +25,12 @@ #include <errno.h> #include <string.h> #include <unistd.h> +#include <sys/types.h> +#include <sys/stat.h> #include "manager.h" #include "log.h" +#include "mount-setup.h" int main(int argc, char *argv[]) { Manager *m = NULL; @@ -41,6 +44,31 @@ int main(int argc, char *argv[]) { else default_unit = SPECIAL_DEFAULT_TARGET; + /* Move out of the way, so that we won't block unmounts */ + assert_se(chdir("/") == 0); + + /* Reset all signal handlers. */ + assert_se(reset_all_signal_handlers() == 0); + + /* Become a session leader if we aren't one yet. */ + setsid(); + + /* Disable the umask logic */ + umask(0); + + /* Make sure D-Bus doesn't fiddle with the SIGPIPE handlers */ + dbus_connection_set_change_sigpipe(FALSE); + + /* Mount /dev, /sys and friends */ + mount_setup(); + + /* Set up logging */ + log_set_target(LOG_TARGET_CONSOLE); + + /* Open the logging devices, if possible and necessary*/ + log_open_syslog(); + log_open_kmsg(); + if ((r = manager_new(&m)) < 0) { log_error("Failed to allocate manager object: %s", strerror(-r)); goto finish; @@ -49,8 +49,6 @@ static int manager_setup_signals(Manager *m) { assert(m); - assert_se(reset_all_signal_handlers() == 0); - assert_se(sigemptyset(&mask) == 0); assert_se(sigaddset(&mask, SIGCHLD) == 0); assert_se(sigaddset(&mask, SIGINT) == 0); /* Kernel sends us this on control-alt-del */ @@ -300,23 +298,12 @@ int manager_new(Manager **_m) { if ((r = manager_find_paths(m)) < 0) goto fail; - if (chdir("/") < 0) - log_warning("Failed to chdir to /: %s", strerror(errno)); - - /* Become a session leader if we aren't one yet. */ - setsid(); - if ((r = manager_setup_signals(m)) < 0) goto fail; - if ((r = mount_setup()) < 0) - goto fail; - if ((r = manager_setup_cgroup(m)) < 0) goto fail; - dbus_connection_set_change_sigpipe(FALSE); - /* Try to connect to the busses, if possible. */ if ((r = bus_init_system(m)) < 0 || (r = bus_init_api(m)) < 0) |