From: Lennart Poettering Date: Tue, 13 Apr 2010 19:13:49 +0000 (+0200) Subject: execute: fix terminal chowning logic X-Git-Tag: v1~514 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=d8b4e2e9acb8c68cd46405ae1e9b8fb06cb75269 execute: fix terminal chowning logic --- diff --git a/execute.c b/execute.c index a82d016cb..73d82d5a7 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) {