diff options
author | Theo de Raadt <deraadt@cvs.openbsd.org> | 1995-10-18 08:53:40 +0000 |
---|---|---|
committer | Theo de Raadt <deraadt@cvs.openbsd.org> | 1995-10-18 08:53:40 +0000 |
commit | d6583bb2a13f329cf0332ef2570eb8bb8fc0e39c (patch) | |
tree | ece253b876159b39c620e62b6c9b1174642e070e /sbin/ttyflags |
initial import of NetBSD tree
Diffstat (limited to 'sbin/ttyflags')
-rw-r--r-- | sbin/ttyflags/Makefile | 6 | ||||
-rw-r--r-- | sbin/ttyflags/ttyflags.8 | 81 | ||||
-rw-r--r-- | sbin/ttyflags/ttyflags.c | 217 |
3 files changed, 304 insertions, 0 deletions
diff --git a/sbin/ttyflags/Makefile b/sbin/ttyflags/Makefile new file mode 100644 index 00000000000..2011374e69b --- /dev/null +++ b/sbin/ttyflags/Makefile @@ -0,0 +1,6 @@ +# $NetBSD: Makefile,v 1.3 1995/03/18 15:01:20 cgd Exp $ + +PROG= ttyflags +MAN= ttyflags.8 + +.include <bsd.prog.mk> diff --git a/sbin/ttyflags/ttyflags.8 b/sbin/ttyflags/ttyflags.8 new file mode 100644 index 00000000000..ded986be995 --- /dev/null +++ b/sbin/ttyflags/ttyflags.8 @@ -0,0 +1,81 @@ +.\" $NetBSD: ttyflags.8,v 1.2 1995/03/18 15:01:22 cgd Exp $ +.\" +.\" Copyright (c) 1994 Christopher G. Demetriou +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed by Christopher G. Demetriou. +.\" 3. The name of the author may not be used to endorse or promote products +.\" derived from this software without specific prior written permission +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd March 30, 1994 +.Dt TTYFLAGS 8 +.Os NetBSD 0.9a +.Sh NAME +.Nm ttyflags +.Nd set device-specific flags for terminals +.Sh SYNOPSIS +.Nm ttyflags +.Op Fl v +.Op Fl a | Ar tty ... +.Sh DESCRIPTION +.Nm Ttyflags +sets the device-specific flags for terminals, based on the flags +found on the terminal's line in +.Pa /etc/ttys . +.Pp +The options are as follows: +.Bl -tag -width Ds +.It Fl a +Set the flags for all terminals in +.Pa /etc/ttys . +.It Fl v +Be verbose about what the terminals' flags will be set to. +.El +.Pp +The +.Ar tty +arguments are optional, but must not be specified if the +.Fl a +flag is used. If specified, the +.Ar tty +arguments should be the base names of +the ttys, as found in +.Pa /etc/ttys . +.Sh FILES +.Bl -tag -width /etc/ttys -compact +.It Pa /etc/ttys +.El +.Sh SEE ALSO +.Xr getttyent 3 , +.Xr ttys 5 +.Sh HISTORY +The +.Nm ttyflags +utility appeared in +.Nx 0.9a . +.Sh BUGS +The conditions on which to report an error are ill-defined. +.Nm Ttyflags +tries to report all significant errors, perhaps going over-board +at times. diff --git a/sbin/ttyflags/ttyflags.c b/sbin/ttyflags/ttyflags.c new file mode 100644 index 00000000000..2d38d891b76 --- /dev/null +++ b/sbin/ttyflags/ttyflags.c @@ -0,0 +1,217 @@ +/* $NetBSD: ttyflags.c,v 1.6 1995/08/13 05:24:03 cgd Exp $ */ + +/* + * Copyright (c) 1994 Christopher G. Demetriou + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Christopher G. Demetriou. + * 4. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef lint +char copyright[] = +"@(#) Copyright (c) 1994 Christopher G. Demetriou\n\ + All rights reserved.\n"; +#endif /* not lint */ + +#ifndef lint +static char rcsid[] = "$NetBSD: ttyflags.c,v 1.6 1995/08/13 05:24:03 cgd Exp $"; +#endif /* not lint */ + +#include <sys/types.h> +#include <sys/cdefs.h> +#include <sys/ioctl.h> + +#include <err.h> +#include <errno.h> +#include <fcntl.h> +#include <limits.h> +#include <paths.h> +#include <stdio.h> +#include <stdlib.h> +#include <ttyent.h> +#include <unistd.h> + +int change_all __P((void)); +int change_ttyflags __P((struct ttyent *)); +int change_ttys __P((char **)); +void usage __P((void)); + +int nflag, vflag; + +/* + * Ttyflags sets the device-specific tty flags, based on the contents + * of /etc/ttys. It can either set all of the ttys' flags, or set + * the flags of the ttys specified on the command line. + */ +int +main(argc, argv) + int argc; + char *argv[]; +{ + int aflag, ch, rval; + + aflag = nflag = vflag = 0; + while ((ch = getopt(argc, argv, "anv")) != EOF) + switch (ch) { + case 'a': + aflag = 1; + break; + case 'n': /* undocumented */ + nflag = 1; + break; + case 'v': + vflag = 1; + break; + case '?': + default: + usage(); + } + argc -= optind; + argv += optind; + + if (aflag && argc != 0) + usage(); + + rval = 0; + + if (setttyent() == 0) + err(1, "setttyent"); + + if (aflag) + rval = change_all(); + else + rval = change_ttys(argv); + + if (endttyent() == 0) + warn("endttyent"); + + exit(rval); +} + +/* + * Change all /etc/ttys entries' flags. + */ +int +change_all() +{ + struct ttyent *tep; + int rval; + + rval = 0; + for (tep = getttyent(); tep != NULL; tep = getttyent()) + if (change_ttyflags(tep)) + rval = 1; + return (rval); +} + +/* + * Change the specified ttys' flags. + */ +int +change_ttys(ttylist) + char **ttylist; +{ + struct ttyent *tep; + int rval; + + rval = 0; + for (; *ttylist != NULL; ttylist++) { + tep = getttynam(*ttylist); + if (tep == NULL) { + warnx("couldn't find an entry in %s for \"%s\"", + _PATH_TTYS, *ttylist); + rval = 1; + continue; + } + + if (change_ttyflags(tep)) + rval = 1; + } + return (rval); +} + +/* + * Acutually do the work; find out what the new flags value should be, + * open the device, and change the flags. + */ +int +change_ttyflags(tep) + struct ttyent *tep; +{ + int fd, flags, rval, st; + char path[PATH_MAX]; + + st = tep->ty_status; + flags = rval = 0; + + /* Convert ttyent.h flags into ioctl flags. */ + if (st & TTY_LOCAL) + flags |= TIOCFLAG_CLOCAL; + if (st & TTY_RTSCTS) + flags |= TIOCFLAG_CRTSCTS; + if (st & TTY_SOFTCAR) + flags |= TIOCFLAG_SOFTCAR; + if (st & TTY_MDMBUF) + flags |= TIOCFLAG_MDMBUF; + + /* Find the full device path name. */ + (void)snprintf(path, sizeof path, "%s%s", _PATH_DEV, tep->ty_name); + + if (vflag) + warnx("setting flags on %s to %0x", path, flags); + if (nflag) + return (0); + + /* Open the device NON-BLOCKING, set the flags, and close it. */ + if ((fd = open(path, O_RDONLY | O_NONBLOCK, 0)) == -1) { + if (!(errno == ENXIO || + (errno == ENOENT && (st & TTY_ON) == 0))) + rval = 1; + if (rval || vflag) + warn("open %s", path); + return (rval); + } + if (ioctl(fd, TIOCSFLAGS, &flags) == -1) + if (errno != ENOTTY || vflag) { + warn("TIOCSFLAGS on %s", path); + rval = (errno != ENOTTY); + } + if (close(fd) == -1) { + warn("close %s", path); + return (1); + } + return (rval); +} + +/* + * Print usage information when a bogus set of arguments is given. + */ +void +usage() +{ + (void)fprintf(stderr, "usage: ttyflags [-v] [-a | tty ... ]\n"); + exit(1); +} |