execute: fix terminal chowning logic

This commit is contained in:
Lennart Poettering 2010-04-13 21:13:49 +02:00
parent 10a9442017
commit d8b4e2e9ac
1 changed files with 7 additions and 8 deletions

View File

@ -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) {