From: Lennart Poettering Date: Tue, 13 Apr 2010 19:13:49 +0000 (+0200) Subject: execute: fix terminal chowning logic X-Git-Tag: 0.git+20100605+dfd8ee-1~117 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d8b4e2e9acb8c68cd46405ae1e9b8fb06cb75269;p=systemd execute: fix terminal chowning logic --- diff --git a/execute.c b/execute.c index a82d016c..73d82d5a 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) {