From e7a681f413be6a2e9212e17a53d8e944eca6befa Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Fri, 19 Jan 2024 20:14:18 +0900 Subject: [PATCH] tty: Set control sessions on pty managers --- apps/getty.c | 2 ++ apps/login.c | 4 +++- apps/netty.c | 2 ++ apps/terminal-vga.c | 2 ++ apps/terminal.c | 1 + 5 files changed, 10 insertions(+), 1 deletion(-) diff --git a/apps/getty.c b/apps/getty.c index 10a24619..da87d959 100644 --- a/apps/getty.c +++ b/apps/getty.c @@ -56,6 +56,8 @@ int main(int argc, char * argv[]) { dup2(fd_serial, 0); dup2(fd_serial, 1); dup2(fd_serial, 2); + ioctl(STDIN_FILENO, TIOCSCTTY, &(int){1}); + tcsetpgrp(STDIN_FILENO, getpid()); system("stty sane"); diff --git a/apps/login.c b/apps/login.c index 3c4a122e..c0cf20a8 100644 --- a/apps/login.c +++ b/apps/login.c @@ -144,8 +144,10 @@ do_fork: f = fork(); if (getpid() != pid) { ioctl(STDIN_FILENO, IOCTLTTYLOGIN, &uid); - toaru_set_credentials(uid); setsid(); + ioctl(STDIN_FILENO, TIOCSCTTY, &(int){1}); + tcsetpgrp(STDIN_FILENO, getpid()); + toaru_set_credentials(uid); char * args[] = { getenv("SHELL"), NULL diff --git a/apps/netty.c b/apps/netty.c index 68a75258..d01d7624 100644 --- a/apps/netty.c +++ b/apps/netty.c @@ -112,6 +112,8 @@ int main(int argc, char * argv[]) { dup2(fd_slave, 0); dup2(fd_slave, 1); dup2(fd_slave, 2); + ioctl(STDIN_FILENO, TIOCSCTTY, &(int){1}); + tcsetpgrp(STDIN_FILENO, getpid()); system("ttysize -q"); diff --git a/apps/terminal-vga.c b/apps/terminal-vga.c index 688e1868..7d5ab61f 100644 --- a/apps/terminal-vga.c +++ b/apps/terminal-vga.c @@ -1298,6 +1298,8 @@ int main(int argc, char ** argv) { dup2(fd_slave, 0); dup2(fd_slave, 1); dup2(fd_slave, 2); + ioctl(STDIN_FILENO, TIOCSCTTY, &(int){1}); + tcsetpgrp(STDIN_FILENO, getpid()); if (argv[optind] != NULL) { char * tokens[] = {argv[optind], NULL}; diff --git a/apps/terminal.c b/apps/terminal.c index e856fe7e..156b7b65 100644 --- a/apps/terminal.c +++ b/apps/terminal.c @@ -2689,6 +2689,7 @@ int main(int argc, char ** argv) { dup2(fd_slave, 1); dup2(fd_slave, 2); + ioctl(STDIN_FILENO, TIOCSCTTY, &(int){1}); tcsetpgrp(STDIN_FILENO, getpid()); /* Set the TERM environment variable. */