From d8b4e2e9acb8c68cd46405ae1e9b8fb06cb75269 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 13 Apr 2010 21:13:49 +0200 Subject: [PATCH] execute: fix terminal chowning logic --- execute.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/execute.c b/execute.c index a82d016..73d82d5 100644 --- a/execute.c +++ b/execute.c @@ -342,8 +342,7 @@ static int chown_terminal(int fd, uid_t uid) { if (fstat(fd, &st) < 0) return -errno; - if (st.st_uid != uid || - st.st_mode != TTY_MODE) + if (st.st_uid != uid || (st.st_mode & 0777) != TTY_MODE) return -EPERM; return 0; @@ -834,6 +833,12 @@ int exec_spawn(ExecCommand *command, r = EXIT_USER; goto fail; } + + if (is_terminal_input(context->std_input)) + if (chown_terminal(STDIN_FILENO, uid) < 0) { + r = EXIT_STDIN; + goto fail; + } } if (apply_permissions) @@ -842,12 +847,6 @@ int exec_spawn(ExecCommand *command, goto fail; } - if (is_terminal_input(context->std_input)) - if (chown_terminal(STDIN_FILENO, uid) < 0) { - r = EXIT_STDIN; - goto fail; - } - if (apply_chroot) { if (context->root_directory) if (chroot(context->root_directory) < 0) { -- 2.39.2