chiark / gitweb /
units: in order to make the default services parseable by GKeyFile, merge repeated...
[elogind.git] / src / execute.c
index 982b7d1bcd90158ee4e11b27e565724f270c9ff2..d7239d544000f40f8073d3c9c25e3263d26c0a8e 100644 (file)
@@ -197,7 +197,7 @@ static int connect_logger_as(const ExecContext *context, ExecOutput output, cons
                 output == EXEC_OUTPUT_KMSG ? "kmsg" : "syslog",
                 context->syslog_priority,
                 context->syslog_identifier ? context->syslog_identifier : ident,
-                !context->syslog_no_prefix);
+                context->syslog_level_prefix);
 
         if (fd != nfd) {
                 r = dup2(fd, nfd) < 0 ? -errno : nfd;
@@ -305,16 +305,16 @@ static int setup_output(const ExecContext *context, int socket_fd, const char *i
 
         case EXEC_OUTPUT_INHERIT:
 
-                /* If the input is connected to a terminal, inherit that... */
+                /* If the input is connected to anything that's not a /dev/null, inherit that... */
                 if (i != EXEC_INPUT_NULL)
                         return dup2(STDIN_FILENO, STDOUT_FILENO) < 0 ? -errno : STDOUT_FILENO;
 
-                /* For PID 1 stdout is always connected to /dev/null,
-                 * hence reopen the console if out parent is PID1. */
-                if (getppid() == 1)
-                        return open_terminal_as(tty_path(context), O_WRONLY, STDOUT_FILENO);
+                /* If we are not started from PID 1 we just inherit STDOUT from our parent process. */
+                if (getppid() != 1)
+                        return STDOUT_FILENO;
 
-                return STDOUT_FILENO;
+                /* We need to open /dev/null here anew, to get the
+                 * right access mode. So we fall through */
 
         case EXEC_OUTPUT_NULL:
                 return open_null_as(O_WRONLY, STDOUT_FILENO);
@@ -356,7 +356,7 @@ static int setup_error(const ExecContext *context, int socket_fd, const char *id
          * the way and are not on a tty */
         if (e == EXEC_OUTPUT_INHERIT &&
             o == EXEC_OUTPUT_INHERIT &&
-            i != EXEC_INPUT_NULL &&
+            i == EXEC_INPUT_NULL &&
             getppid () != 1)
                 return STDERR_FILENO;
 
@@ -964,7 +964,7 @@ int exec_spawn(ExecCommand *command,
                         goto fail;
                 }
 
-                if (!context->no_setsid)
+                if (!context->same_pgrp)
                         if (setsid() < 0) {
                                 r = EXIT_SETSID;
                                 goto fail;
@@ -1294,6 +1294,7 @@ void exec_context_init(ExecContext *c) {
         c->ioprio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, 0);
         c->cpu_sched_policy = SCHED_OTHER;
         c->syslog_priority = LOG_DAEMON|LOG_INFO;
+        c->syslog_level_prefix = true;
         c->mount_flags = MS_SHARED;
 }