diff options
author | jkh <jkh@FreeBSD.org> | 1996-12-02 12:32:46 +0000 |
---|---|---|
committer | jkh <jkh@FreeBSD.org> | 1996-12-02 12:32:46 +0000 |
commit | 19c8e3590eb69c931d661625dda16fd1bb866bb4 (patch) | |
tree | 2769f1f2499acbaaaa6160ff2885bc2931baf237 /usr.sbin/watch | |
parent | 239b648336e79fe1eb04148a10085de8b7628161 (diff) | |
download | FreeBSD-src-19c8e3590eb69c931d661625dda16fd1bb866bb4.zip FreeBSD-src-19c8e3590eb69c931d661625dda16fd1bb866bb4.tar.gz |
I have added a '-n' flag to the watch(8) command. This option
disables the ability to interactively select a new tty. I have also
removed a check for uid == 0 because it gets in the way of using suid
mode based access control. Watch (8)is only runnable by root, so this
does not really change things much.
Closes PR#2131
Submitted-By: adrian@virginia.edu
Diffstat (limited to 'usr.sbin/watch')
-rw-r--r-- | usr.sbin/watch/watch.8 | 8 | ||||
-rw-r--r-- | usr.sbin/watch/watch.c | 21 |
2 files changed, 20 insertions, 9 deletions
diff --git a/usr.sbin/watch/watch.8 b/usr.sbin/watch/watch.8 index 50bd5b8..f2f9ed8 100644 --- a/usr.sbin/watch/watch.8 +++ b/usr.sbin/watch/watch.8 @@ -11,7 +11,7 @@ .Nm watch .Op Fl ciotW .Ar tty -.\" watch [-ciotW] [<tty name>] +.\" watch [-ciotnW] [<tty name>] .Sh DESCRIPTION .Nm Watch allows the superuser to examine all data coming through a specified tty. @@ -45,6 +45,12 @@ For more info see .Xr snp 4 . .It Fl t Print the date and time when observation of a given tty is started. +.It Fl n +Disable the ability to switch the watched tty interactively. This disables +both change requests made with <control-X> as well as automatic prompting +when the current tty is closed or overflows. In all cases where a prompt +would be displayed, watch will exit. The reconnect flags are unaffected by +this option. .It Fl W Allow write access to observed tty. .It Ar tty diff --git a/usr.sbin/watch/watch.c b/usr.sbin/watch/watch.c index a145916..8add801 100644 --- a/usr.sbin/watch/watch.c +++ b/usr.sbin/watch/watch.c @@ -48,6 +48,7 @@ int opt_reconn_oflow = 0; int opt_interactive = 1; int opt_timestamp = 0; int opt_write = 0; +int opt_no_switch = 0; char dev_name[DEV_NAME_LEN]; int snp_io; @@ -158,7 +159,7 @@ cleanup() void show_usage() { - printf("watch -[ciotW] [tty name]\n"); + printf("watch -[ciotnW] [tty name]\n"); exit(1); } @@ -274,16 +275,13 @@ main(ac, av) (void) setlocale(LC_TIME, ""); - if (getuid() != 0) - fatal(NULL); - if (isatty(std_out)) opt_interactive = 1; else opt_interactive = 0; - while ((ch = getopt(ac, av, "Wciot")) != EOF) + while ((ch = getopt(ac, av, "Wciotn")) != EOF) switch (ch) { case 'W': opt_write = 1; @@ -300,6 +298,9 @@ main(ac, av) case 't': opt_timestamp = 1; break; + case 'n': + opt_no_switch = 1; + break; case '?': default: show_usage(); @@ -312,7 +313,7 @@ main(ac, av) snp_io = open_snp(); if (*(av += optind) == NULL) { - if (opt_interactive) + if (opt_interactive && !opt_no_switch) ask_dev(dev_name, MSG_INIT); else fatal("No device name given."); @@ -345,6 +346,8 @@ main(ac, av) clear(); break; case CHR_SWITCH: + if (opt_no_switch) + break; detach_snp(); ask_dev(dev_name, MSG_CHANGE); set_dev(dev_name); @@ -353,6 +356,8 @@ main(ac, av) if (opt_write) { if (write(snp_io,chb,nread) != nread) { detach_snp(); + if (opt_no_switch) + fatal("Write failed."); ask_dev(dev_name, MSG_NOWRITE); set_dev(dev_name); } @@ -370,7 +375,7 @@ main(ac, av) case SNP_OFLOW: if (opt_reconn_oflow) attach_snp(); - else if (opt_interactive) { + else if (opt_interactive && !opt_no_switch) { ask_dev(dev_name, MSG_OFLOW); set_dev(dev_name); } else @@ -379,7 +384,7 @@ main(ac, av) case SNP_TTYCLOSE: if (opt_reconn_close) attach_snp(); - else if (opt_interactive) { + else if (opt_interactive && !opt_no_switch) { ask_dev(dev_name, MSG_CLOSED); set_dev(dev_name); } else |