summaryrefslogtreecommitdiff
path: root/console-tools
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2007-01-19 21:19:35 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2007-01-19 21:19:35 +0000
commit9af7c9d6b62ceb07a9ba24cee0cf4a08c689235e (patch)
tree69a650a8cd686f21087fc572a995420b6ac632cc /console-tools
parentf8c11aa65df2af4ab20c0effc42997bbd7357cc3 (diff)
downloadbusybox-w32-9af7c9d6b62ceb07a9ba24cee0cf4a08c689235e.tar.gz
busybox-w32-9af7c9d6b62ceb07a9ba24cee0cf4a08c689235e.tar.bz2
busybox-w32-9af7c9d6b62ceb07a9ba24cee0cf4a08c689235e.zip
openvt,getty,vfork_daemon_rexec,mount: tighten up fd cleanup code
(will close all fd's > 2 on daemonization now) getty: fix "getty -" support, and also do not try to chown/chmod "-" telnetd: fix "lost ctty" bug Yet another attempt on saner function names: bb_sanitize_server_stdio(0/1) -> bb_sanitize_stdio() + bb_daemonize();
Diffstat (limited to 'console-tools')
-rw-r--r--console-tools/openvt.c15
1 files changed, 6 insertions, 9 deletions
diff --git a/console-tools/openvt.c b/console-tools/openvt.c
index f1cf5645b..c7b3e4fa4 100644
--- a/console-tools/openvt.c
+++ b/console-tools/openvt.c
@@ -17,7 +17,6 @@ int openvt_main(int argc, char **argv)
17 int fd; 17 int fd;
18 char vtname[sizeof(VC_FORMAT) + 2]; 18 char vtname[sizeof(VC_FORMAT) + 2];
19 19
20
21 if (argc < 3) { 20 if (argc < 3) {
22 bb_show_usage(); 21 bb_show_usage();
23 } 22 }
@@ -25,18 +24,16 @@ int openvt_main(int argc, char **argv)
25 sprintf(vtname, VC_FORMAT, (int)xatoul_range(argv[1], 1, 63)); 24 sprintf(vtname, VC_FORMAT, (int)xatoul_range(argv[1], 1, 63));
26 25
27 if (fork() == 0) { 26 if (fork() == 0) {
28 /* leave current vt */ 27 /* child */
29 if (setsid() < 0) { 28 /* leave current vt (controlling tty) */
30 bb_perror_msg_and_die("setsid"); 29 setsid();
31 }
32 close(0); /* so that new vt becomes stdin */
33
34 /* and grab new one */ 30 /* and grab new one */
35 fd = xopen(vtname, O_RDWR); 31 fd = xopen(vtname, O_RDWR);
36 32 /* Reassign stdin, stdout and sterr */
37 /* Reassign stdout and sterr */ 33 dup2(fd, STDIN_FILENO);
38 dup2(fd, STDOUT_FILENO); 34 dup2(fd, STDOUT_FILENO);
39 dup2(fd, STDERR_FILENO); 35 dup2(fd, STDERR_FILENO);
36 while (fd > 2) close(fd--);
40 37
41 execvp(argv[2], &argv[2]); 38 execvp(argv[2], &argv[2]);
42 _exit(1); 39 _exit(1);