summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2010-07-12 22:04:59 +0200
committerLennart Poettering <lennart@poettering.net>2010-07-12 22:04:59 +0200
commit21d21ea42eadd742873c2bddfd474e3b34510431 (patch)
tree4ffd49104ad92f51f6b6ffc1c08455c84a222178
parent5830833f7c09b7584f59d048cf8535dc42ea9846 (diff)
execute: inherit from original input, not the fixed up
-rw-r--r--src/execute.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/execute.c b/src/execute.c
index 9fe0a05767..6b6c2855b4 100644
--- a/src/execute.c
+++ b/src/execute.c
@@ -308,6 +308,10 @@ static int setup_output(const ExecContext *context, int socket_fd, const char *i
case EXEC_OUTPUT_INHERIT:
+ /* If input got downgraded, inherit the original value */
+ if (i == EXEC_INPUT_NULL && is_terminal_input(context->std_input))
+ return open_terminal_as(tty_path(context), O_WRONLY, STDOUT_FILENO);
+
/* 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;
@@ -360,10 +364,11 @@ static int setup_error(const ExecContext *context, int socket_fd, const char *id
if (e == EXEC_OUTPUT_INHERIT &&
o == EXEC_OUTPUT_INHERIT &&
i == EXEC_INPUT_NULL &&
+ !is_terminal_input(context->std_input) &&
getppid () != 1)
return STDERR_FILENO;
- /* Duplicate form stdout if possible */
+ /* Duplicate from stdout if possible */
if (e == o || e == EXEC_OUTPUT_INHERIT)
return dup2(STDOUT_FILENO, STDERR_FILENO) < 0 ? -errno : STDERR_FILENO;