X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=main.c;h=86ccc72a168be8b7472fe062f2137b2e1c741cfa;hb=a0d40ac588701010ea6a9366f6a874e83844858e;hp=838f5c89e3812a97e21503a000329af5d9f4c0cb;hpb=27b14a2297d296f7a2c47dd20d7e0c6fb8acd20c;p=elogind.git diff --git a/main.c b/main.c index 838f5c89e..86ccc72a1 100644 --- a/main.c +++ b/main.c @@ -25,9 +25,12 @@ #include #include #include +#include +#include #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;