1/* vi: set sw=4 ts=4: */ 2/* 3 * setconsole.c - redirect system console output 4 * 5 * Copyright (C) 2004,2005 Enrik Berkhan <Enrik.Berkhan@inka.de> 6 * Copyright (C) 2008 Bernhard Reutner-Fischer 7 * 8 * Licensed under GPLv2 or later, see file LICENSE in this source tree. 9 */ 10//config:config SETCONSOLE 11//config: bool "setconsole (3.6 kb)" 12//config: default y 13//config: help 14//config: Redirect writes to /dev/console to another device, 15//config: like the current tty while logged in via telnet. 16//config: This does not redirect kernel log, only writes 17//config: from user space. 18//config: 19//config:config FEATURE_SETCONSOLE_LONG_OPTIONS 20//config: bool "Enable long options" 21//config: default y 22//config: depends on SETCONSOLE && LONG_OPTS 23 24//applet:IF_SETCONSOLE(APPLET_NOEXEC(setconsole, setconsole, BB_DIR_SBIN, BB_SUID_DROP, setconsole)) 25 26//kbuild:lib-$(CONFIG_SETCONSOLE) += setconsole.o 27 28//usage:#define setconsole_trivial_usage 29//usage: "[-r] [DEVICE]" 30//usage:#define setconsole_full_usage "\n\n" 31//usage: "Make writes to /dev/console appear on DEVICE (default: /dev/tty)." 32//usage: "\n""Does not redirect kernel log output or reads from /dev/console." 33//usage: "\n" 34//usage: "\n"" -r Reset: writes to /dev/console go to kernel log tty(s)" 35 36/* It was a bbox-specific invention, but SUSE does have a similar utility. 37 * SUSE has no -r option, though. 38 */ 39 40#include "libbb.h" 41 42int setconsole_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 43int setconsole_main(int argc UNUSED_PARAM, char **argv) 44{ 45 const char *device = CURRENT_TTY; 46 int reset; 47 48 /* at most one non-option argument */ 49 reset = getopt32(argv, "^" "r" "\0" "?1"); 50 51 argv += 1 + reset; 52 if (*argv) { 53 device = *argv; 54 } else { 55 if (reset) 56 device = DEV_CONSOLE; 57 } 58 59//TODO: fails if TIOCCONS redir is already active to some tty. 60//I think SUSE version first does TIOCCONS on /dev/console fd (iow: resets) 61//then TIOCCONS to new tty? 62 xioctl(xopen(device, O_WRONLY), TIOCCONS, NULL); 63 return EXIT_SUCCESS; 64} 65