Import NetBSD's termios'ed getty into a vendor branch.
Obtained from: NetBSD 1.1R
This commit is contained in:
parent
6f2c1e42c7
commit
712c581c89
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/vendor/NetBSD/dist/; revision=15249
10
libexec/getty/Makefile
Normal file
10
libexec/getty/Makefile
Normal file
@ -0,0 +1,10 @@
|
||||
# from: @(#)Makefile 8.1 (Berkeley) 6/4/93
|
||||
# $Id: Makefile,v 1.7 1994/12/22 10:27:06 cgd Exp $
|
||||
|
||||
PROG= getty
|
||||
SRCS= main.c init.c subr.c
|
||||
DPADD+= ${LIBUTIL}
|
||||
LDADD+= -lutil
|
||||
MAN= getty.8 gettytab.5 ttys.5
|
||||
|
||||
.include <bsd.prog.mk>
|
57
libexec/getty/extern.h
Normal file
57
libexec/getty/extern.h
Normal file
@ -0,0 +1,57 @@
|
||||
/*
|
||||
* Copyright (c) 1993
|
||||
* The Regents of the University of California. 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 the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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.
|
||||
*
|
||||
* from: @(#)extern.h 8.1 (Berkeley) 6/4/93
|
||||
* $Id: extern.h,v 1.2 1994/08/17 20:10:29 pk Exp $
|
||||
*/
|
||||
|
||||
struct delayval;
|
||||
|
||||
int adelay __P((int, struct delayval *));
|
||||
char *autobaud __P((void));
|
||||
int delaybits __P((void));
|
||||
void edithost __P((char *));
|
||||
void gendefaults __P((void));
|
||||
int getent __P((char *, char *));
|
||||
int getflag __P((char *));
|
||||
long getnum __P((char *));
|
||||
char *getstr __P((char *, char **));
|
||||
void gettable __P((char *, char *));
|
||||
void makeenv __P((char *[]));
|
||||
char *portselector __P((void));
|
||||
void set_ttydefaults __P((int));
|
||||
void setchars __P((void));
|
||||
void setdefaults __P((void));
|
||||
void setflags __P((int));
|
||||
int speed __P((int));
|
||||
|
||||
int login_tty __P((int)); /* From libutil. */
|
128
libexec/getty/getty.8
Normal file
128
libexec/getty/getty.8
Normal file
@ -0,0 +1,128 @@
|
||||
.\" Copyright (c) 1980, 1991, 1993
|
||||
.\" The Regents of the University of California. 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 the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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.
|
||||
.\"
|
||||
.\" from: @(#)getty.8 8.1 (Berkeley) 6/4/93
|
||||
.\" $Id: getty.8,v 1.3 1994/08/17 20:10:30 pk Exp $
|
||||
.\"
|
||||
.Dd June 4, 1993
|
||||
.Dt GETTY 8
|
||||
.Os BSD 4
|
||||
.Sh NAME
|
||||
.Nm getty
|
||||
.Nd set terminal mode
|
||||
.Sh SYNOPSIS
|
||||
.Nm getty
|
||||
.Oo
|
||||
.Ar type
|
||||
.Op Ar tty
|
||||
.Oc
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Nm getty
|
||||
program
|
||||
is called by
|
||||
.Xr init 8
|
||||
to open and initialize the tty line, read a login name, and invoke
|
||||
.Xr login 1 .
|
||||
.Pp
|
||||
The argument
|
||||
.Ar tty
|
||||
is the special device file in
|
||||
.Pa /dev
|
||||
to open for the terminal (for example, ``ttyh0'').
|
||||
If there is no argument or the argument is
|
||||
.Ql Fl ,
|
||||
the tty line is assumed to be open as file descriptor 0.
|
||||
.Pp
|
||||
The
|
||||
.Ar type
|
||||
argument can be used to make
|
||||
.Nm getty
|
||||
treat the terminal line specially.
|
||||
This argument is used as an index into the
|
||||
.Nm gettytab 5
|
||||
database, to determine the characteristics of the line.
|
||||
If there is no argument, or there is no such table, the
|
||||
.Em default
|
||||
table is used.
|
||||
If there is no
|
||||
.Pa /etc/gettytab
|
||||
a set of system defaults is used.
|
||||
If indicated by the table located,
|
||||
.Nm getty
|
||||
will clear the terminal screen,
|
||||
print a banner heading,
|
||||
and prompt for a login name.
|
||||
Usually either the banner or the login prompt will include
|
||||
the system hostname.
|
||||
.Pp
|
||||
Most of the default actions of
|
||||
.Nm getty
|
||||
can be circumvented, or modified, by a suitable
|
||||
.Nm gettytab
|
||||
table.
|
||||
.Pp
|
||||
The
|
||||
.Nm getty
|
||||
program
|
||||
can be set to timeout after some interval,
|
||||
which will cause dial up lines to hang up
|
||||
if the login name is not entered reasonably quickly.
|
||||
.Sh DIAGNOSTICS
|
||||
.Bl -diag
|
||||
.It "ttyxx: No such device or address."
|
||||
.It "ttyxx: No such file or address."
|
||||
A terminal which is turned
|
||||
on in the
|
||||
.Xr ttys
|
||||
file cannot be opened, likely because the requisite
|
||||
lines are either not configured into the system, the associated device
|
||||
was not attached during boot-time system configuration,
|
||||
or the special file in
|
||||
.Pa /dev
|
||||
does not exist.
|
||||
.El
|
||||
.Sh FILES
|
||||
.Bl -tag -width /etc/gettytab -compact
|
||||
.It Pa /etc/gettytab
|
||||
.El
|
||||
.Sh SEE ALSO
|
||||
.Xr gettytab 5 ,
|
||||
.Xr init 8 ,
|
||||
.Xr login 1 ,
|
||||
.Xr ioctl 2 ,
|
||||
.Xr tty 4 ,
|
||||
.Xr ttys 5
|
||||
.Sh HISTORY
|
||||
A
|
||||
.Nm getty
|
||||
program appeared in
|
||||
.At v6 .
|
385
libexec/getty/gettytab.5
Normal file
385
libexec/getty/gettytab.5
Normal file
@ -0,0 +1,385 @@
|
||||
.\" Copyright (c) 1983, 1991, 1993
|
||||
.\" The Regents of the University of California. 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 the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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.
|
||||
.\"
|
||||
.\" from: @(#)gettytab.5 8.4 (Berkeley) 4/19/94
|
||||
.\" $Id: gettytab.5,v 1.12 1994/09/24 00:56:05 mycroft Exp $
|
||||
.\"
|
||||
.Dd April 19, 1994
|
||||
.Dt GETTYTAB 5
|
||||
.Os BSD 4.2
|
||||
.Sh NAME
|
||||
.Nm gettytab
|
||||
.Nd terminal configuration data base
|
||||
.Sh SYNOPSIS
|
||||
.Nm gettytab
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Nm gettytab
|
||||
file
|
||||
is a simplified version of the
|
||||
.Xr termcap 5
|
||||
data base
|
||||
used to describe terminal lines.
|
||||
The initial terminal login process
|
||||
.Xr getty 8
|
||||
accesses the
|
||||
.Nm gettytab
|
||||
file each time it starts, allowing simpler
|
||||
reconfiguration of terminal characteristics.
|
||||
Each entry in the data base
|
||||
is used to describe one class of terminals.
|
||||
.Pp
|
||||
There is a default terminal class,
|
||||
.Em default ,
|
||||
that is used to set global defaults for all other classes.
|
||||
(That is, the
|
||||
.Em default
|
||||
entry is read, then the entry for the class required
|
||||
is used to override particular settings.)
|
||||
.Sh CAPABILITIES
|
||||
Refer to
|
||||
.Xr termcap 5
|
||||
for a description of the file layout.
|
||||
The
|
||||
.Em default
|
||||
column below lists defaults obtained if there is
|
||||
no entry in the table obtained, nor one in the special
|
||||
.Em default
|
||||
table.
|
||||
.Bl -column Namexx /usr/bin/login Default
|
||||
.It Sy Name Type Default Description
|
||||
.It "ap bool false terminal uses any parity"
|
||||
.It "bk str 0377 alternate end of line character (input break)"
|
||||
.It "c0 num unused tty control flags to write messages"
|
||||
.It "c1 num unused tty control flags to read login name"
|
||||
.It "c2 num unused tty control flags to leave terminal as"
|
||||
.It "ce bool false use crt erase algorithm"
|
||||
.It "ck bool false use crt kill algorithm"
|
||||
.It "cl str" Ta Dv NULL Ta
|
||||
.No "screen clear sequence"
|
||||
.It "co bool false console - add"
|
||||
.Ql \en
|
||||
after login prompt
|
||||
.It "ds str" Ta So Li ^Y Sc Ta
|
||||
.No "delayed suspend character"
|
||||
.It "dx bool false set"
|
||||
.Dv DECCTLQ
|
||||
.It "ec bool false leave echo"
|
||||
.Tn OFF
|
||||
.It "ep bool false terminal uses even parity"
|
||||
.It "er str" Ta So Li ^? Sc Ta
|
||||
.No "erase character"
|
||||
.It "et str" Ta So Li ^D Sc Ta
|
||||
.No "end of text"
|
||||
.Pq Dv EOF
|
||||
character
|
||||
.It "ev str" Ta Dv NULL Ta
|
||||
.No "initial environment"
|
||||
.It "f0 num unused tty mode flags to write messages"
|
||||
.It "f1 num unused tty mode flags to read login name"
|
||||
.It "f2 num unused tty mode flags to leave terminal as"
|
||||
.It "fl str" Ta So Li ^O Sc Ta
|
||||
.No "output flush character"
|
||||
.It "hc bool false do"
|
||||
.Tn NOT
|
||||
hangup line on last close
|
||||
.It "he str" Ta Dv NULL Ta
|
||||
.No "hostname editing string"
|
||||
.It "hn str hostname hostname"
|
||||
.It "ht bool false terminal has real tabs"
|
||||
.It "i0 num unused tty input flags to write messages"
|
||||
.It "i1 num unused tty input flags to read login name"
|
||||
.It "i2 num unused tty input flags to leave terminal as"
|
||||
.It "ig bool false ignore garbage characters in login name"
|
||||
.It "im str" Ta Dv NULL Ta
|
||||
.No "initial (banner) message"
|
||||
.It "in str" Ta So Li ^C Sc Ta
|
||||
.No "interrupt character"
|
||||
.It "is num unused input speed"
|
||||
.It "kl str" Ta So Li ^U Sc Ta
|
||||
.No "kill character"
|
||||
.It "l0 num unused tty local flags to write messages"
|
||||
.It "l1 num unused tty local flags to read login name"
|
||||
.It "l2 num unused tty local flags to leave terminal as"
|
||||
.It "lc bool false terminal has lower case"
|
||||
.It "lm str login: login prompt"
|
||||
.It "ln str" Ta So Li ^V Sc Ta
|
||||
.No "``literal next'' character"
|
||||
.It "lo str" Ta Pa /usr/bin/login Ta
|
||||
.No "program to exec when name obtained"
|
||||
.It "mb bool false do flow control based on carrier"
|
||||
.It "nl bool false terminal has (or might have) a newline character"
|
||||
.It "np bool false terminal uses no parity (i.e. 8-bit characters)"
|
||||
.It "nx str default next table (for auto speed selection)"
|
||||
.It "o0 num unused tty output flags to write messages"
|
||||
.It "o1 num unused tty output flags to read login name"
|
||||
.It "o2 num unused tty output flags to leave terminal as"
|
||||
.It "op bool false terminal uses odd parity"
|
||||
.It "os num unused output speed"
|
||||
.It "pc str" Ta So Li \e0 Sc Ta
|
||||
.No "pad character"
|
||||
.It "pe bool false use printer (hard copy) erase algorithm"
|
||||
.It "pf num 0 delay"
|
||||
between first prompt and following flush (seconds)
|
||||
.It "ps bool false line connected to a"
|
||||
.Tn MICOM
|
||||
port selector
|
||||
.It "qu str" Ta So Li \&^\e Sc Ta
|
||||
.No "quit character"
|
||||
.It "rp str" Ta So Li ^R Sc Ta
|
||||
.No "line retype character"
|
||||
.It "rw bool false do"
|
||||
.Tn NOT
|
||||
use raw for input, use cbreak
|
||||
.It "sp num unused line speed (input and output)"
|
||||
.It "su str" Ta So Li ^Z Sc Ta
|
||||
.No "suspend character"
|
||||
.It "tc str none table continuation"
|
||||
.It "to num 0 timeout (seconds)"
|
||||
.It "tt str" Ta Dv NULL Ta
|
||||
.No "terminal type (for environment)"
|
||||
.It "ub bool false do unbuffered output (of prompts etc)"
|
||||
.It "we str" Ta So Li ^W Sc Ta
|
||||
.No "word erase character"
|
||||
.It "xc bool false do
|
||||
.Tn NOT
|
||||
echo control chars as
|
||||
.Ql ^X
|
||||
.It "xf str" Ta So Li ^S Sc Ta Dv XOFF
|
||||
(stop output) character
|
||||
.It "xn str" Ta So Li ^Q Sc Ta Dv XON
|
||||
(start output) character
|
||||
.El
|
||||
.Pp
|
||||
The following capabilities are no longer supported by getty(8):
|
||||
.Bl -column Namexx /usr/bin/login Default
|
||||
.It "bd num 0 backspace delay"
|
||||
.It "cb bool false use crt backspace mode"
|
||||
.It "cd num 0 carriage-return delay"
|
||||
.It "fd num 0 form-feed (vertical motion) delay"
|
||||
.It "nd num 0 newline (line-feed) delay"
|
||||
.It "uc bool false terminal is known upper case only"
|
||||
.El
|
||||
.Pp
|
||||
If no line speed is specified, speed will not be altered
|
||||
from that which prevails when getty is entered.
|
||||
Specifying an input or output speed will override
|
||||
line speed for stated direction only.
|
||||
.Pp
|
||||
Terminal modes to be used for the output of the message,
|
||||
for input of the login name,
|
||||
and to leave the terminal set as upon completion,
|
||||
are derived from the boolean flags specified.
|
||||
If the derivation should prove inadequate,
|
||||
any (or all) of these three may be overridden
|
||||
with one of the
|
||||
.Em \&c0 ,
|
||||
.Em \&c1 ,
|
||||
.Em \&c2 ,
|
||||
.Em \&i0 ,
|
||||
.Em \&i1 ,
|
||||
.Em \&i2 ,
|
||||
.Em \&l0 ,
|
||||
.Em \&l1 ,
|
||||
.Em \&l2 ,
|
||||
.Em \&o0 ,
|
||||
.Em \&o1 ,
|
||||
or
|
||||
.Em \&o2
|
||||
numeric specifications, which can be used to specify
|
||||
(usually in octal, with a leading '0')
|
||||
the exact values of the flags.
|
||||
These flags correspond to the termios
|
||||
.Em c_cflag ,
|
||||
.Em c_iflag ,
|
||||
.Em c_lflag ,
|
||||
and
|
||||
.Em c_oflag
|
||||
fields, respectively. Each these sets must be completely specified to be
|
||||
effective.
|
||||
The
|
||||
.Em \&f0 ,
|
||||
.Em \&f1 ,
|
||||
and
|
||||
.Em \&f2
|
||||
are excepted for backwards compatibility with a previous incarnation of
|
||||
the TTY sub-system. In these flags the bottom 16 bits of the (32 bits)
|
||||
value contain the sgttyb
|
||||
.Em sg_flags
|
||||
field, while the top 16 bits represent the local mode word.
|
||||
.Pp
|
||||
Should
|
||||
.Xr getty 8
|
||||
receive a null character
|
||||
(presumed to indicate a line break)
|
||||
it will restart using the table indicated by the
|
||||
.Em nx
|
||||
entry. If there is none, it will re-use its original table.
|
||||
.Pp
|
||||
Delays are specified in milliseconds, the nearest possible
|
||||
delay available in the tty driver will be used.
|
||||
Should greater certainty be desired, delays
|
||||
with values 0, 1, 2, and 3 are interpreted as
|
||||
choosing that particular delay algorithm from the driver.
|
||||
.Pp
|
||||
The
|
||||
.Em \&cl
|
||||
screen clear string may be preceded by a (decimal) number
|
||||
of milliseconds of delay required (a la termcap).
|
||||
This delay is simulated by repeated use of the pad character
|
||||
.Em \&pc .
|
||||
.Pp
|
||||
The initial message, and login message,
|
||||
.Em \&im
|
||||
and
|
||||
.Em \&lm
|
||||
may include any of the following character sequences, which expand to
|
||||
information about the environment in which
|
||||
.Xr getty 8
|
||||
is running.
|
||||
.Pp
|
||||
.Bl -tag -width \&%xxx -compact
|
||||
.It \&%d
|
||||
The current date.
|
||||
.It \&%h
|
||||
The hostname of the machine, which is normally obtained from the
|
||||
system using
|
||||
.Xr gethostname 2 ,
|
||||
but may also be overridden by the
|
||||
.Em \&hn
|
||||
table entry.
|
||||
In either case it may be edited with the
|
||||
.Em \&he
|
||||
string.
|
||||
A '@' in the
|
||||
.Em \&he
|
||||
string causes one character from the real hostname to
|
||||
be copied to the final hostname.
|
||||
A '#' in the
|
||||
.Em \&he
|
||||
string causes the next character of the real hostname
|
||||
to be skipped.
|
||||
Each character that
|
||||
is neither '@' nor '#' is copied into the final hostname.
|
||||
Surplus '@' and '#' characters are ignored.
|
||||
.It \&%t
|
||||
The tty name.
|
||||
.It "\&%m, \&%r, \&%s, \&%v"
|
||||
The type of machine, release of the operating system, name of the
|
||||
operating system, and version of the kernel, respectively, as
|
||||
returned by
|
||||
.Xr uname 2 .
|
||||
.It \&%%
|
||||
A
|
||||
.Dq %
|
||||
character.
|
||||
.El
|
||||
.Pp
|
||||
When getty execs the login process, given
|
||||
in the
|
||||
.Em \&lo
|
||||
string (usually
|
||||
.Dq Pa /usr/bin/login ) ,
|
||||
it will have set
|
||||
the environment to include the terminal type, as indicated
|
||||
by the
|
||||
.Em \&tt
|
||||
string (if it exists).
|
||||
The
|
||||
.Em \&ev
|
||||
string, can be used to enter additional data into
|
||||
the environment.
|
||||
It is a list of comma separated strings, each of which
|
||||
will presumably be of the form
|
||||
.Em name=value .
|
||||
.Pp
|
||||
If a non-zero timeout is specified, with
|
||||
.Em \&to ,
|
||||
then getty will exit within the indicated
|
||||
number of seconds, either having
|
||||
received a login name and passed control
|
||||
to
|
||||
.Xr login 1 ,
|
||||
or having received an alarm signal, and exited.
|
||||
This may be useful to hangup dial in lines.
|
||||
.Pp
|
||||
Output from
|
||||
.Xr getty 8
|
||||
is even parity unless
|
||||
.Em \&op
|
||||
or
|
||||
.Em \&np
|
||||
is specified.
|
||||
The
|
||||
.Em \&op
|
||||
string
|
||||
may be specified with
|
||||
.Em \&ap
|
||||
to allow any parity on input, but generate odd parity output.
|
||||
Note: this only applies while getty is being run,
|
||||
terminal driver limitations prevent a more complete
|
||||
implementation.
|
||||
.Xr Getty 8
|
||||
does not check parity of input characters in
|
||||
.Dv RAW
|
||||
mode.
|
||||
.Sh SEE ALSO
|
||||
.Xr login 1 ,
|
||||
.Xr gethostname 2 ,
|
||||
.Xr uname 2 ,
|
||||
.Xr termcap 5 ,
|
||||
.Xr getty 8 .
|
||||
.Sh BUGS
|
||||
The special characters (erase, kill, etc.) are reset to system defaults
|
||||
by
|
||||
.Xr login 1 .
|
||||
In
|
||||
.Em all
|
||||
cases, '#' or '^H' typed in a login name will be treated as
|
||||
an erase character, and '@' will be treated as a kill character.
|
||||
.Pp
|
||||
The delay stuff is a real crock.
|
||||
Apart form its general lack of flexibility, some
|
||||
of the delay algorithms are not implemented.
|
||||
The terminal driver should support sane delay settings.
|
||||
.Pp
|
||||
The
|
||||
.Em \&he
|
||||
capability is stupid.
|
||||
.Pp
|
||||
The
|
||||
.Xr termcap
|
||||
format is horrid, something more rational should
|
||||
have been chosen.
|
||||
.Sh HISTORY
|
||||
The
|
||||
.Nm gettytab
|
||||
file format appeared in 4.2BSD.
|
171
libexec/getty/gettytab.h
Normal file
171
libexec/getty/gettytab.h
Normal file
@ -0,0 +1,171 @@
|
||||
/*
|
||||
* Copyright (c) 1983, 1993, 1994
|
||||
* The Regents of the University of California. 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 the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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.
|
||||
*
|
||||
* from: @(#)gettytab.h 8.2 (Berkeley) 3/30/94
|
||||
* $Id: gettytab.h,v 1.7 1994/08/17 20:10:34 pk Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
* Getty description definitions.
|
||||
*/
|
||||
struct gettystrs {
|
||||
char *field; /* name to lookup in gettytab */
|
||||
char *defalt; /* value we find by looking in defaults */
|
||||
char *value; /* value that we find there */
|
||||
};
|
||||
|
||||
struct gettynums {
|
||||
char *field; /* name to lookup */
|
||||
long defalt; /* number we find in defaults */
|
||||
long value; /* number we find there */
|
||||
int set; /* we actually got this one */
|
||||
};
|
||||
|
||||
struct gettyflags {
|
||||
char *field; /* name to lookup */
|
||||
char invrt; /* name existing in gettytab --> false */
|
||||
char defalt; /* true/false in defaults */
|
||||
char value; /* true/false flag */
|
||||
char set; /* we found it */
|
||||
};
|
||||
|
||||
/*
|
||||
* String values.
|
||||
*/
|
||||
#define NX gettystrs[0].value
|
||||
#define CL gettystrs[1].value
|
||||
#define IM gettystrs[2].value
|
||||
#define LM gettystrs[3].value
|
||||
#define ER gettystrs[4].value
|
||||
#define KL gettystrs[5].value
|
||||
#define ET gettystrs[6].value
|
||||
#define PC gettystrs[7].value
|
||||
#define TT gettystrs[8].value
|
||||
#define EV gettystrs[9].value
|
||||
#define LO gettystrs[10].value
|
||||
#define HN gettystrs[11].value
|
||||
#define HE gettystrs[12].value
|
||||
#define IN gettystrs[13].value
|
||||
#define QU gettystrs[14].value
|
||||
#define XN gettystrs[15].value
|
||||
#define XF gettystrs[16].value
|
||||
#define BK gettystrs[17].value
|
||||
#define SU gettystrs[18].value
|
||||
#define DS gettystrs[19].value
|
||||
#define RP gettystrs[20].value
|
||||
#define FL gettystrs[21].value
|
||||
#define WE gettystrs[22].value
|
||||
#define LN gettystrs[23].value
|
||||
|
||||
/*
|
||||
* Numeric definitions.
|
||||
*/
|
||||
#define IS gettynums[0].value
|
||||
#define OS gettynums[1].value
|
||||
#define SP gettynums[2].value
|
||||
#define ND gettynums[3].value
|
||||
#define CD gettynums[4].value
|
||||
#define TD gettynums[5].value
|
||||
#define FD gettynums[6].value
|
||||
#define BD gettynums[7].value
|
||||
#define TO gettynums[8].value
|
||||
#define F0 gettynums[9].value
|
||||
#define F0set gettynums[9].set
|
||||
#define F1 gettynums[10].value
|
||||
#define F1set gettynums[10].set
|
||||
#define F2 gettynums[11].value
|
||||
#define F2set gettynums[11].set
|
||||
#define PF gettynums[12].value
|
||||
#define C0 gettynums[13].value
|
||||
#define C0set gettynums[13].set
|
||||
#define C1 gettynums[14].value
|
||||
#define C1set gettynums[14].set
|
||||
#define C2 gettynums[15].value
|
||||
#define C2set gettynums[15].set
|
||||
#define I0 gettynums[16].value
|
||||
#define I0set gettynums[16].set
|
||||
#define I1 gettynums[17].value
|
||||
#define I1set gettynums[17].set
|
||||
#define I2 gettynums[18].value
|
||||
#define I2set gettynums[18].set
|
||||
#define L0 gettynums[19].value
|
||||
#define L0set gettynums[19].set
|
||||
#define L1 gettynums[20].value
|
||||
#define L1set gettynums[20].set
|
||||
#define L2 gettynums[21].value
|
||||
#define L2set gettynums[21].set
|
||||
#define O0 gettynums[22].value
|
||||
#define O0set gettynums[22].set
|
||||
#define O1 gettynums[23].value
|
||||
#define O1set gettynums[23].set
|
||||
#define O2 gettynums[24].value
|
||||
#define O2set gettynums[24].set
|
||||
|
||||
/*
|
||||
* Boolean values.
|
||||
*/
|
||||
#define HT gettyflags[0].value
|
||||
#define NL gettyflags[1].value
|
||||
#define EP gettyflags[2].value
|
||||
#define EPset gettyflags[2].set
|
||||
#define OP gettyflags[3].value
|
||||
#define OPset gettyflags[3].set
|
||||
#define AP gettyflags[4].value
|
||||
#define APset gettyflags[4].set
|
||||
#define EC gettyflags[5].value
|
||||
#define CO gettyflags[6].value
|
||||
#define CB gettyflags[7].value
|
||||
#define CK gettyflags[8].value
|
||||
#define CE gettyflags[9].value
|
||||
#define PE gettyflags[10].value
|
||||
#define RW gettyflags[11].value
|
||||
#define XC gettyflags[12].value
|
||||
#define LC gettyflags[13].value
|
||||
#define UC gettyflags[14].value
|
||||
#define IG gettyflags[15].value
|
||||
#define PS gettyflags[16].value
|
||||
#define HC gettyflags[17].value
|
||||
#define UB gettyflags[18].value
|
||||
#define AB gettyflags[19].value
|
||||
#define DX gettyflags[20].value
|
||||
#define NP gettyflags[21].value
|
||||
#define MB gettyflags[22].value
|
||||
|
||||
int getent __P((char *, char *));
|
||||
long getnum __P((char *));
|
||||
int getflag __P((char *));
|
||||
char *getstr __P((char *, char **));
|
||||
|
||||
extern struct gettyflags gettyflags[];
|
||||
extern struct gettynums gettynums[];
|
||||
extern struct gettystrs gettystrs[];
|
||||
extern int hopcount;
|
133
libexec/getty/init.c
Normal file
133
libexec/getty/init.c
Normal file
@ -0,0 +1,133 @@
|
||||
/*
|
||||
* Copyright (c) 1983, 1993
|
||||
* The Regents of the University of California. 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 the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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
|
||||
/*static char sccsid[] = "from: @(#)init.c 8.1 (Berkeley) 6/4/93";*/
|
||||
static char rcsid[] = "$Id: init.c,v 1.6 1994/08/17 20:10:35 pk Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
* Getty table initializations.
|
||||
*
|
||||
* Melbourne getty.
|
||||
*/
|
||||
#include <termios.h>
|
||||
#include "gettytab.h"
|
||||
#include "pathnames.h"
|
||||
|
||||
extern struct termios tmode;
|
||||
extern char hostname[];
|
||||
|
||||
struct gettystrs gettystrs[] = {
|
||||
{ "nx" }, /* next table */
|
||||
{ "cl" }, /* screen clear characters */
|
||||
{ "im" }, /* initial message */
|
||||
{ "lm", "login: " }, /* login message */
|
||||
{ "er", &tmode.c_cc[VERASE] }, /* erase character */
|
||||
{ "kl", &tmode.c_cc[VKILL] }, /* kill character */
|
||||
{ "et", &tmode.c_cc[VEOF] }, /* eof chatacter (eot) */
|
||||
{ "pc", "" }, /* pad character */
|
||||
{ "tt" }, /* terminal type */
|
||||
{ "ev" }, /* enviroment */
|
||||
{ "lo", _PATH_LOGIN }, /* login program */
|
||||
{ "hn", hostname }, /* host name */
|
||||
{ "he" }, /* host name edit */
|
||||
{ "in", &tmode.c_cc[VINTR] }, /* interrupt char */
|
||||
{ "qu", &tmode.c_cc[VQUIT] }, /* quit char */
|
||||
{ "xn", &tmode.c_cc[VSTART] }, /* XON (start) char */
|
||||
{ "xf", &tmode.c_cc[VSTOP] }, /* XOFF (stop) char */
|
||||
{ "bk", &tmode.c_cc[VEOL] }, /* brk char (alt \n) */
|
||||
{ "su", &tmode.c_cc[VSUSP] }, /* suspend char */
|
||||
{ "ds", &tmode.c_cc[VDSUSP] }, /* delayed suspend */
|
||||
{ "rp", &tmode.c_cc[VREPRINT] },/* reprint char */
|
||||
{ "fl", &tmode.c_cc[VDISCARD] },/* flush output */
|
||||
{ "we", &tmode.c_cc[VWERASE] }, /* word erase */
|
||||
{ "ln", &tmode.c_cc[VLNEXT] }, /* literal next */
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
struct gettynums gettynums[] = {
|
||||
{ "is" }, /* input speed */
|
||||
{ "os" }, /* output speed */
|
||||
{ "sp" }, /* both speeds */
|
||||
{ "nd" }, /* newline delay */
|
||||
{ "cd" }, /* carriage-return delay */
|
||||
{ "td" }, /* tab delay */
|
||||
{ "fd" }, /* form-feed delay */
|
||||
{ "bd" }, /* backspace delay */
|
||||
{ "to" }, /* timeout */
|
||||
{ "f0" }, /* output flags */
|
||||
{ "f1" }, /* input flags */
|
||||
{ "f2" }, /* user mode flags */
|
||||
{ "pf" }, /* delay before flush at 1st prompt */
|
||||
{ "c0" }, /* output c_flags */
|
||||
{ "c1" }, /* input c_flags */
|
||||
{ "c2" }, /* user mode c_flags */
|
||||
{ "i0" }, /* output i_flags */
|
||||
{ "i1" }, /* input i_flags */
|
||||
{ "i2" }, /* user mode i_flags */
|
||||
{ "l0" }, /* output l_flags */
|
||||
{ "l1" }, /* input l_flags */
|
||||
{ "l2" }, /* user mode l_flags */
|
||||
{ "o0" }, /* output o_flags */
|
||||
{ "o1" }, /* input o_flags */
|
||||
{ "o2" }, /* user mode o_flags */
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
struct gettyflags gettyflags[] = {
|
||||
{ "ht", 0 }, /* has tabs */
|
||||
{ "nl", 1 }, /* has newline char */
|
||||
{ "ep", 0 }, /* even parity */
|
||||
{ "op", 0 }, /* odd parity */
|
||||
{ "ap", 0 }, /* any parity */
|
||||
{ "ec", 1 }, /* no echo */
|
||||
{ "co", 0 }, /* console special */
|
||||
{ "cb", 0 }, /* crt backspace */
|
||||
{ "ck", 0 }, /* crt kill */
|
||||
{ "ce", 0 }, /* crt erase */
|
||||
{ "pe", 0 }, /* printer erase */
|
||||
{ "rw", 1 }, /* don't use raw */
|
||||
{ "xc", 1 }, /* don't ^X ctl chars */
|
||||
{ "lc", 0 }, /* terminal las lower case */
|
||||
{ "uc", 0 }, /* terminal has no lower case */
|
||||
{ "ig", 0 }, /* ignore garbage */
|
||||
{ "ps", 0 }, /* do port selector speed select */
|
||||
{ "hc", 1 }, /* don't set hangup on close */
|
||||
{ "ub", 0 }, /* unbuffered output */
|
||||
{ "ab", 0 }, /* auto-baud detect with '\r' */
|
||||
{ "dx", 0 }, /* set decctlq */
|
||||
{ "np", 0 }, /* no parity at all (8bit chars) */
|
||||
{ "mb", 0 }, /* do MDMBUF flow control */
|
||||
{ 0 }
|
||||
};
|
560
libexec/getty/main.c
Normal file
560
libexec/getty/main.c
Normal file
@ -0,0 +1,560 @@
|
||||
/*-
|
||||
* Copyright (c) 1980, 1993
|
||||
* The Regents of the University of California. 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 the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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
|
||||
static char copyright[] =
|
||||
"@(#) Copyright (c) 1980, 1993\n\
|
||||
The Regents of the University of California. All rights reserved.\n";
|
||||
#endif /* not lint */
|
||||
|
||||
#ifndef lint
|
||||
/*static char sccsid[] = "from: @(#)main.c 8.1 (Berkeley) 6/20/93";*/
|
||||
static char rcsid[] = "$Id: main.c,v 1.15 1995/08/13 04:08:27 cgd Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/stat.h>
|
||||
#include <termios.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/resource.h>
|
||||
#include <sys/utsname.h>
|
||||
#include <errno.h>
|
||||
#include <signal.h>
|
||||
#include <fcntl.h>
|
||||
#include <time.h>
|
||||
#include <ctype.h>
|
||||
#include <fcntl.h>
|
||||
#include <setjmp.h>
|
||||
#include <signal.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <syslog.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "gettytab.h"
|
||||
#include "pathnames.h"
|
||||
#include "extern.h"
|
||||
|
||||
/*
|
||||
* Set the amount of running time that getty should accumulate
|
||||
* before deciding that something is wrong and exit.
|
||||
*/
|
||||
#define GETTY_TIMEOUT 60 /* seconds */
|
||||
|
||||
struct termios tmode, omode;
|
||||
|
||||
int crmod, digit, lower, upper;
|
||||
|
||||
char hostname[MAXHOSTNAMELEN];
|
||||
struct utsname kerninfo;
|
||||
char name[16];
|
||||
char dev[] = _PATH_DEV;
|
||||
char ttyn[32];
|
||||
char *portselector();
|
||||
char *ttyname();
|
||||
|
||||
#define OBUFSIZ 128
|
||||
#define TABBUFSIZ 512
|
||||
|
||||
char defent[TABBUFSIZ];
|
||||
char tabent[TABBUFSIZ];
|
||||
|
||||
char *env[128];
|
||||
|
||||
char partab[] = {
|
||||
0001,0201,0201,0001,0201,0001,0001,0201,
|
||||
0202,0004,0003,0205,0005,0206,0201,0001,
|
||||
0201,0001,0001,0201,0001,0201,0201,0001,
|
||||
0001,0201,0201,0001,0201,0001,0001,0201,
|
||||
0200,0000,0000,0200,0000,0200,0200,0000,
|
||||
0000,0200,0200,0000,0200,0000,0000,0200,
|
||||
0000,0200,0200,0000,0200,0000,0000,0200,
|
||||
0200,0000,0000,0200,0000,0200,0200,0000,
|
||||
0200,0000,0000,0200,0000,0200,0200,0000,
|
||||
0000,0200,0200,0000,0200,0000,0000,0200,
|
||||
0000,0200,0200,0000,0200,0000,0000,0200,
|
||||
0200,0000,0000,0200,0000,0200,0200,0000,
|
||||
0000,0200,0200,0000,0200,0000,0000,0200,
|
||||
0200,0000,0000,0200,0000,0200,0200,0000,
|
||||
0200,0000,0000,0200,0000,0200,0200,0000,
|
||||
0000,0200,0200,0000,0200,0000,0000,0201
|
||||
};
|
||||
|
||||
#define ERASE tmode.c_cc[VERASE]
|
||||
#define KILL tmode.c_cc[VKILL]
|
||||
#define EOT tmode.c_cc[VEOF]
|
||||
|
||||
jmp_buf timeout;
|
||||
|
||||
static void
|
||||
dingdong()
|
||||
{
|
||||
|
||||
alarm(0);
|
||||
signal(SIGALRM, SIG_DFL);
|
||||
longjmp(timeout, 1);
|
||||
}
|
||||
|
||||
jmp_buf intrupt;
|
||||
|
||||
static void
|
||||
interrupt()
|
||||
{
|
||||
|
||||
signal(SIGINT, interrupt);
|
||||
longjmp(intrupt, 1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Action to take when getty is running too long.
|
||||
*/
|
||||
void
|
||||
timeoverrun(signo)
|
||||
int signo;
|
||||
{
|
||||
|
||||
syslog(LOG_ERR, "getty exiting due to excessive running time\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
static int getname __P((void));
|
||||
static void oflush __P((void));
|
||||
static void prompt __P((void));
|
||||
static void putchr __P((int));
|
||||
static void putf __P((char *));
|
||||
static void putpad __P((char *));
|
||||
static void puts __P((char *));
|
||||
|
||||
int
|
||||
main(argc, argv)
|
||||
int argc;
|
||||
char *argv[];
|
||||
{
|
||||
extern char **environ;
|
||||
char *tname;
|
||||
long allflags;
|
||||
int repcnt = 0, failopenlogged = 0;
|
||||
struct rlimit limit;
|
||||
|
||||
signal(SIGINT, SIG_IGN);
|
||||
/*
|
||||
signal(SIGQUIT, SIG_DFL);
|
||||
*/
|
||||
openlog("getty", LOG_ODELAY|LOG_CONS|LOG_PID, LOG_AUTH);
|
||||
gethostname(hostname, sizeof(hostname));
|
||||
if (hostname[0] == '\0')
|
||||
strcpy(hostname, "Amnesiac");
|
||||
uname(&kerninfo);
|
||||
|
||||
/*
|
||||
* Limit running time to deal with broken or dead lines.
|
||||
*/
|
||||
(void)signal(SIGXCPU, timeoverrun);
|
||||
limit.rlim_max = RLIM_INFINITY;
|
||||
limit.rlim_cur = GETTY_TIMEOUT;
|
||||
(void)setrlimit(RLIMIT_CPU, &limit);
|
||||
|
||||
/*
|
||||
* The following is a work around for vhangup interactions
|
||||
* which cause great problems getting window systems started.
|
||||
* If the tty line is "-", we do the old style getty presuming
|
||||
* that the file descriptors are already set up for us.
|
||||
* J. Gettys - MIT Project Athena.
|
||||
*/
|
||||
if (argc <= 2 || strcmp(argv[2], "-") == 0)
|
||||
strcpy(ttyn, ttyname(0));
|
||||
else {
|
||||
int i;
|
||||
|
||||
strcpy(ttyn, dev);
|
||||
strncat(ttyn, argv[2], sizeof(ttyn)-sizeof(dev));
|
||||
if (strcmp(argv[0], "+") != 0) {
|
||||
chown(ttyn, 0, 0);
|
||||
chmod(ttyn, 0600);
|
||||
revoke(ttyn);
|
||||
/*
|
||||
* Delay the open so DTR stays down long enough to be detected.
|
||||
*/
|
||||
sleep(2);
|
||||
while ((i = open(ttyn, O_RDWR)) == -1) {
|
||||
if ((repcnt % 10 == 0) &&
|
||||
(errno != ENXIO || !failopenlogged)) {
|
||||
syslog(LOG_ERR, "%s: %m", ttyn);
|
||||
closelog();
|
||||
failopenlogged = 1;
|
||||
}
|
||||
repcnt++;
|
||||
sleep(60);
|
||||
}
|
||||
login_tty(i);
|
||||
}
|
||||
}
|
||||
|
||||
/* Start with default tty settings */
|
||||
if (tcgetattr(0, &tmode) < 0) {
|
||||
syslog(LOG_ERR, "%s: %m", ttyn);
|
||||
exit(1);
|
||||
}
|
||||
omode = tmode;
|
||||
|
||||
gettable("default", defent);
|
||||
gendefaults();
|
||||
tname = "default";
|
||||
if (argc > 1)
|
||||
tname = argv[1];
|
||||
for (;;) {
|
||||
int off;
|
||||
|
||||
gettable(tname, tabent);
|
||||
if (OPset || EPset || APset)
|
||||
APset++, OPset++, EPset++;
|
||||
setdefaults();
|
||||
off = 0;
|
||||
(void)tcflush(0, TCIOFLUSH); /* clear out the crap */
|
||||
ioctl(0, FIONBIO, &off); /* turn off non-blocking mode */
|
||||
ioctl(0, FIOASYNC, &off); /* ditto for async mode */
|
||||
|
||||
if (IS)
|
||||
cfsetispeed(&tmode, IS);
|
||||
else if (SP)
|
||||
cfsetispeed(&tmode, SP);
|
||||
if (OS)
|
||||
cfsetospeed(&tmode, OS);
|
||||
else if (SP)
|
||||
cfsetospeed(&tmode, SP);
|
||||
setflags(0);
|
||||
setchars();
|
||||
if (tcsetattr(0, TCSANOW, &tmode) < 0) {
|
||||
syslog(LOG_ERR, "%s: %m", ttyn);
|
||||
exit(1);
|
||||
}
|
||||
if (AB) {
|
||||
extern char *autobaud();
|
||||
|
||||
tname = autobaud();
|
||||
continue;
|
||||
}
|
||||
if (PS) {
|
||||
tname = portselector();
|
||||
continue;
|
||||
}
|
||||
if (CL && *CL)
|
||||
putpad(CL);
|
||||
edithost(HE);
|
||||
if (IM && *IM)
|
||||
putf(IM);
|
||||
if (setjmp(timeout)) {
|
||||
tmode.c_ispeed = tmode.c_ospeed = 0;
|
||||
(void)tcsetattr(0, TCSANOW, &tmode);
|
||||
exit(1);
|
||||
}
|
||||
if (TO) {
|
||||
signal(SIGALRM, dingdong);
|
||||
alarm(TO);
|
||||
}
|
||||
if (getname()) {
|
||||
register int i;
|
||||
|
||||
oflush();
|
||||
alarm(0);
|
||||
signal(SIGALRM, SIG_DFL);
|
||||
if (name[0] == '-') {
|
||||
puts("user names may not start with '-'.");
|
||||
continue;
|
||||
}
|
||||
if (!(upper || lower || digit))
|
||||
continue;
|
||||
setflags(2);
|
||||
if (crmod) {
|
||||
tmode.c_iflag |= ICRNL;
|
||||
tmode.c_oflag |= ONLCR;
|
||||
}
|
||||
#if XXX
|
||||
if (upper || UC)
|
||||
tmode.sg_flags |= LCASE;
|
||||
if (lower || LC)
|
||||
tmode.sg_flags &= ~LCASE;
|
||||
#endif
|
||||
if (tcsetattr(0, TCSANOW, &tmode) < 0) {
|
||||
syslog(LOG_ERR, "%s: %m", ttyn);
|
||||
exit(1);
|
||||
}
|
||||
signal(SIGINT, SIG_DFL);
|
||||
for (i = 0; environ[i] != (char *)0; i++)
|
||||
env[i] = environ[i];
|
||||
makeenv(&env[i]);
|
||||
|
||||
limit.rlim_max = RLIM_INFINITY;
|
||||
limit.rlim_cur = RLIM_INFINITY;
|
||||
(void)setrlimit(RLIMIT_CPU, &limit);
|
||||
execle(LO, "login", "-p", name, (char *) 0, env);
|
||||
syslog(LOG_ERR, "%s: %m", LO);
|
||||
exit(1);
|
||||
}
|
||||
alarm(0);
|
||||
signal(SIGALRM, SIG_DFL);
|
||||
signal(SIGINT, SIG_IGN);
|
||||
if (NX && *NX)
|
||||
tname = NX;
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
getname()
|
||||
{
|
||||
register int c;
|
||||
register char *np;
|
||||
char cs;
|
||||
|
||||
/*
|
||||
* Interrupt may happen if we use CBREAK mode
|
||||
*/
|
||||
if (setjmp(intrupt)) {
|
||||
signal(SIGINT, SIG_IGN);
|
||||
return (0);
|
||||
}
|
||||
signal(SIGINT, interrupt);
|
||||
setflags(1);
|
||||
prompt();
|
||||
if (PF > 0) {
|
||||
oflush();
|
||||
sleep(PF);
|
||||
PF = 0;
|
||||
}
|
||||
if (tcsetattr(0, TCSANOW, &tmode) < 0) {
|
||||
syslog(LOG_ERR, "%s: %m", ttyn);
|
||||
exit(1);
|
||||
}
|
||||
crmod = digit = lower = upper = 0;
|
||||
np = name;
|
||||
for (;;) {
|
||||
oflush();
|
||||
if (read(STDIN_FILENO, &cs, 1) <= 0)
|
||||
exit(0);
|
||||
if ((c = cs&0177) == 0)
|
||||
return (0);
|
||||
if (c == EOT)
|
||||
exit(1);
|
||||
if (c == '\r' || c == '\n' || np >= &name[sizeof name]) {
|
||||
putf("\r\n");
|
||||
break;
|
||||
}
|
||||
if (islower(c))
|
||||
lower = 1;
|
||||
else if (isupper(c))
|
||||
upper = 1;
|
||||
else if (c == ERASE || c == '#' || c == '\b') {
|
||||
if (np > name) {
|
||||
np--;
|
||||
if (cfgetospeed(&tmode) >= 1200)
|
||||
puts("\b \b");
|
||||
else
|
||||
putchr(cs);
|
||||
}
|
||||
continue;
|
||||
} else if (c == KILL || c == '@') {
|
||||
putchr(cs);
|
||||
putchr('\r');
|
||||
if (cfgetospeed(&tmode) < 1200)
|
||||
putchr('\n');
|
||||
/* this is the way they do it down under ... */
|
||||
else if (np > name)
|
||||
puts(" \r");
|
||||
prompt();
|
||||
np = name;
|
||||
continue;
|
||||
} else if (isdigit(c))
|
||||
digit++;
|
||||
if (IG && (c <= ' ' || c > 0176))
|
||||
continue;
|
||||
*np++ = c;
|
||||
putchr(cs);
|
||||
}
|
||||
signal(SIGINT, SIG_IGN);
|
||||
*np = 0;
|
||||
if (c == '\r')
|
||||
crmod = 1;
|
||||
if (upper && !lower && !LC || UC)
|
||||
for (np = name; *np; np++)
|
||||
if (isupper(*np))
|
||||
*np = tolower(*np);
|
||||
return (1);
|
||||
}
|
||||
|
||||
static void
|
||||
putpad(s)
|
||||
register char *s;
|
||||
{
|
||||
register pad = 0;
|
||||
speed_t ospeed = cfgetospeed(&tmode);
|
||||
|
||||
if (isdigit(*s)) {
|
||||
while (isdigit(*s)) {
|
||||
pad *= 10;
|
||||
pad += *s++ - '0';
|
||||
}
|
||||
pad *= 10;
|
||||
if (*s == '.' && isdigit(s[1])) {
|
||||
pad += s[1] - '0';
|
||||
s += 2;
|
||||
}
|
||||
}
|
||||
|
||||
puts(s);
|
||||
/*
|
||||
* If no delay needed, or output speed is
|
||||
* not comprehensible, then don't try to delay.
|
||||
*/
|
||||
if (pad == 0 || ospeed <= 0)
|
||||
return;
|
||||
|
||||
/*
|
||||
* Round up by a half a character frame, and then do the delay.
|
||||
* Too bad there are no user program accessible programmed delays.
|
||||
* Transmitting pad characters slows many terminals down and also
|
||||
* loads the system.
|
||||
*/
|
||||
pad = (pad * ospeed + 50000) / 100000;
|
||||
while (pad--)
|
||||
putchr(*PC);
|
||||
}
|
||||
|
||||
static void
|
||||
puts(s)
|
||||
register char *s;
|
||||
{
|
||||
while (*s)
|
||||
putchr(*s++);
|
||||
}
|
||||
|
||||
char outbuf[OBUFSIZ];
|
||||
int obufcnt = 0;
|
||||
|
||||
static void
|
||||
putchr(cc)
|
||||
int cc;
|
||||
{
|
||||
char c;
|
||||
|
||||
c = cc;
|
||||
if (!NP) {
|
||||
c |= partab[c&0177] & 0200;
|
||||
if (OP)
|
||||
c ^= 0200;
|
||||
}
|
||||
if (!UB) {
|
||||
outbuf[obufcnt++] = c;
|
||||
if (obufcnt >= OBUFSIZ)
|
||||
oflush();
|
||||
} else
|
||||
write(STDOUT_FILENO, &c, 1);
|
||||
}
|
||||
|
||||
static void
|
||||
oflush()
|
||||
{
|
||||
if (obufcnt)
|
||||
write(STDOUT_FILENO, outbuf, obufcnt);
|
||||
obufcnt = 0;
|
||||
}
|
||||
|
||||
static void
|
||||
prompt()
|
||||
{
|
||||
|
||||
putf(LM);
|
||||
if (CO)
|
||||
putchr('\n');
|
||||
}
|
||||
|
||||
static void
|
||||
putf(cp)
|
||||
register char *cp;
|
||||
{
|
||||
extern char editedhost[];
|
||||
time_t t;
|
||||
char *slash, db[100];
|
||||
|
||||
while (*cp) {
|
||||
if (*cp != '%') {
|
||||
putchr(*cp++);
|
||||
continue;
|
||||
}
|
||||
switch (*++cp) {
|
||||
|
||||
case 't':
|
||||
slash = strrchr(ttyn, '/');
|
||||
if (slash == (char *) 0)
|
||||
puts(ttyn);
|
||||
else
|
||||
puts(&slash[1]);
|
||||
break;
|
||||
|
||||
case 'h':
|
||||
puts(editedhost);
|
||||
break;
|
||||
|
||||
case 'd': {
|
||||
static char fmt[] = "%l:% %p on %A, %d %B %Y";
|
||||
|
||||
fmt[4] = 'M'; /* I *hate* SCCS... */
|
||||
(void)time(&t);
|
||||
(void)strftime(db, sizeof(db), fmt, localtime(&t));
|
||||
puts(db);
|
||||
break;
|
||||
|
||||
case 's':
|
||||
puts(kerninfo.sysname);
|
||||
break;
|
||||
|
||||
case 'm':
|
||||
puts(kerninfo.machine);
|
||||
break;
|
||||
|
||||
case 'r':
|
||||
puts(kerninfo.release);
|
||||
break;
|
||||
|
||||
case 'v':
|
||||
puts(kerninfo.version);
|
||||
break;
|
||||
}
|
||||
|
||||
case '%':
|
||||
putchr('%');
|
||||
break;
|
||||
}
|
||||
cp++;
|
||||
}
|
||||
}
|
40
libexec/getty/pathnames.h
Normal file
40
libexec/getty/pathnames.h
Normal file
@ -0,0 +1,40 @@
|
||||
/*
|
||||
* Copyright (c) 1989, 1993
|
||||
* The Regents of the University of California. 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 the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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.
|
||||
*
|
||||
* from: @(#)pathnames.h 8.1 (Berkeley) 6/4/93
|
||||
* $Id: pathnames.h,v 1.3 1994/08/17 20:10:39 pk Exp $
|
||||
*/
|
||||
|
||||
#include <paths.h>
|
||||
|
||||
#define _PATH_GETTYTAB "/etc/gettytab"
|
||||
#define _PATH_LOGIN "/usr/bin/login"
|
726
libexec/getty/subr.c
Normal file
726
libexec/getty/subr.c
Normal file
@ -0,0 +1,726 @@
|
||||
/*
|
||||
* Copyright (c) 1983, 1993
|
||||
* The Regents of the University of California. 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 the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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
|
||||
/*static char sccsid[] = "from: @(#)subr.c 8.1 (Berkeley) 6/4/93";*/
|
||||
static char rcsid[] = "$Id: subr.c,v 1.18 1995/10/05 08:51:31 mycroft Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
* Melbourne getty.
|
||||
*/
|
||||
#define COMPAT_43
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <termios.h>
|
||||
#include <sys/ioctl.h>
|
||||
|
||||
#include "gettytab.h"
|
||||
#include "pathnames.h"
|
||||
#include "extern.h"
|
||||
|
||||
extern struct termios tmode, omode;
|
||||
|
||||
static void compatflags __P((long));
|
||||
|
||||
/*
|
||||
* Get a table entry.
|
||||
*/
|
||||
void
|
||||
gettable(name, buf)
|
||||
char *name, *buf;
|
||||
{
|
||||
register struct gettystrs *sp;
|
||||
register struct gettynums *np;
|
||||
register struct gettyflags *fp;
|
||||
long n;
|
||||
char *dba[2];
|
||||
dba[0] = _PATH_GETTYTAB;
|
||||
dba[1] = 0;
|
||||
|
||||
if (cgetent(&buf, dba, name) != 0)
|
||||
return;
|
||||
|
||||
for (sp = gettystrs; sp->field; sp++)
|
||||
cgetstr(buf, sp->field, &sp->value);
|
||||
for (np = gettynums; np->field; np++) {
|
||||
if (cgetnum(buf, np->field, &n) == -1)
|
||||
np->set = 0;
|
||||
else {
|
||||
np->set = 1;
|
||||
np->value = n;
|
||||
}
|
||||
}
|
||||
for (fp = gettyflags; fp->field; fp++) {
|
||||
if (cgetcap(buf, fp->field, ':') == NULL)
|
||||
fp->set = 0;
|
||||
else {
|
||||
fp->set = 1;
|
||||
fp->value = 1 ^ fp->invrt;
|
||||
}
|
||||
}
|
||||
#ifdef DEBUG
|
||||
printf("name=\"%s\", buf=\"%s\"\n", name, buf);
|
||||
for (sp = gettystrs; sp->field; sp++)
|
||||
printf("cgetstr: %s=%s\n", sp->field, sp->value);
|
||||
for (np = gettynums; np->field; np++)
|
||||
printf("cgetnum: %s=%d\n", np->field, np->value);
|
||||
for (fp = gettyflags; fp->field; fp++)
|
||||
printf("cgetflags: %s='%c' set='%c'\n", fp->field,
|
||||
fp->value + '0', fp->set + '0');
|
||||
exit(1);
|
||||
#endif /* DEBUG */
|
||||
}
|
||||
|
||||
void
|
||||
gendefaults()
|
||||
{
|
||||
register struct gettystrs *sp;
|
||||
register struct gettynums *np;
|
||||
register struct gettyflags *fp;
|
||||
|
||||
for (sp = gettystrs; sp->field; sp++)
|
||||
if (sp->value)
|
||||
sp->defalt = sp->value;
|
||||
for (np = gettynums; np->field; np++)
|
||||
if (np->set)
|
||||
np->defalt = np->value;
|
||||
for (fp = gettyflags; fp->field; fp++)
|
||||
if (fp->set)
|
||||
fp->defalt = fp->value;
|
||||
else
|
||||
fp->defalt = fp->invrt;
|
||||
}
|
||||
|
||||
void
|
||||
setdefaults()
|
||||
{
|
||||
register struct gettystrs *sp;
|
||||
register struct gettynums *np;
|
||||
register struct gettyflags *fp;
|
||||
|
||||
for (sp = gettystrs; sp->field; sp++)
|
||||
if (!sp->value)
|
||||
sp->value = sp->defalt;
|
||||
for (np = gettynums; np->field; np++)
|
||||
if (!np->set)
|
||||
np->value = np->defalt;
|
||||
for (fp = gettyflags; fp->field; fp++)
|
||||
if (!fp->set)
|
||||
fp->value = fp->defalt;
|
||||
}
|
||||
|
||||
static char **
|
||||
charnames[] = {
|
||||
&ER, &KL, &IN, &QU, &XN, &XF, &ET, &BK,
|
||||
&SU, &DS, &RP, &FL, &WE, &LN, 0
|
||||
};
|
||||
|
||||
static char *
|
||||
charvars[] = {
|
||||
&tmode.c_cc[VERASE], &tmode.c_cc[VKILL], &tmode.c_cc[VINTR],
|
||||
&tmode.c_cc[VQUIT], &tmode.c_cc[VSTART], &tmode.c_cc[VSTOP],
|
||||
&tmode.c_cc[VEOF], &tmode.c_cc[VEOL], &tmode.c_cc[VSUSP],
|
||||
&tmode.c_cc[VDSUSP], &tmode.c_cc[VREPRINT], &tmode.c_cc[VDISCARD],
|
||||
&tmode.c_cc[VWERASE], &tmode.c_cc[VLNEXT], 0
|
||||
};
|
||||
|
||||
void
|
||||
setchars()
|
||||
{
|
||||
register int i;
|
||||
register char *p;
|
||||
|
||||
for (i = 0; charnames[i]; i++) {
|
||||
p = *charnames[i];
|
||||
if (p && *p)
|
||||
*charvars[i] = *p;
|
||||
else
|
||||
*charvars[i] = _POSIX_VDISABLE;
|
||||
}
|
||||
}
|
||||
|
||||
/* Macros to clear/set/test flags. */
|
||||
#define SET(t, f) (t) |= (f)
|
||||
#define CLR(t, f) (t) &= ~(f)
|
||||
#define ISSET(t, f) ((t) & (f))
|
||||
|
||||
void
|
||||
setflags(n)
|
||||
int n;
|
||||
{
|
||||
register tcflag_t iflag, oflag, cflag, lflag;
|
||||
|
||||
#ifdef COMPAT_43
|
||||
switch (n) {
|
||||
case 0:
|
||||
if (F0set) {
|
||||
compatflags(F0);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (F1set) {
|
||||
compatflags(F1);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (F2set) {
|
||||
compatflags(F2);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
switch (n) {
|
||||
case 0:
|
||||
if (C0set && I0set && L0set && O0set) {
|
||||
tmode.c_cflag = C0;
|
||||
tmode.c_iflag = I0;
|
||||
tmode.c_lflag = L0;
|
||||
tmode.c_oflag = O0;
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (C1set && I1set && L1set && O1set) {
|
||||
tmode.c_cflag = C1;
|
||||
tmode.c_iflag = I1;
|
||||
tmode.c_lflag = L1;
|
||||
tmode.c_oflag = O1;
|
||||
return;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (C2set && I2set && L2set && O2set) {
|
||||
tmode.c_cflag = C2;
|
||||
tmode.c_iflag = I2;
|
||||
tmode.c_lflag = L2;
|
||||
tmode.c_oflag = O2;
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
iflag = omode.c_iflag;
|
||||
oflag = omode.c_oflag;
|
||||
cflag = omode.c_cflag;
|
||||
lflag = omode.c_lflag;
|
||||
|
||||
if (NP) {
|
||||
CLR(cflag, CSIZE|PARENB);
|
||||
SET(cflag, CS8);
|
||||
CLR(iflag, ISTRIP|INPCK|IGNPAR);
|
||||
} else if (AP || EP || OP) {
|
||||
CLR(cflag, CSIZE);
|
||||
SET(cflag, CS7|PARENB);
|
||||
SET(iflag, ISTRIP);
|
||||
if (OP && !EP) {
|
||||
SET(iflag, INPCK|IGNPAR);
|
||||
SET(cflag, PARODD);
|
||||
if (AP)
|
||||
CLR(iflag, INPCK);
|
||||
} else if (EP && !OP) {
|
||||
SET(iflag, INPCK|IGNPAR);
|
||||
CLR(cflag, PARODD);
|
||||
if (AP)
|
||||
CLR(iflag, INPCK);
|
||||
} else if (AP || EP && OP) {
|
||||
CLR(iflag, INPCK|IGNPAR);
|
||||
CLR(cflag, PARODD);
|
||||
}
|
||||
} /* else, leave as is */
|
||||
|
||||
#if 0
|
||||
if (UC)
|
||||
f |= LCASE;
|
||||
#endif
|
||||
|
||||
if (HC)
|
||||
SET(cflag, HUPCL);
|
||||
else
|
||||
CLR(cflag, HUPCL);
|
||||
|
||||
if (MB)
|
||||
SET(cflag, MDMBUF);
|
||||
else
|
||||
CLR(cflag, MDMBUF);
|
||||
|
||||
if (NL) {
|
||||
SET(iflag, ICRNL);
|
||||
SET(oflag, ONLCR|OPOST);
|
||||
} else {
|
||||
CLR(iflag, ICRNL);
|
||||
CLR(oflag, ONLCR);
|
||||
}
|
||||
|
||||
if (!HT)
|
||||
SET(oflag, OXTABS|OPOST);
|
||||
else
|
||||
CLR(oflag, OXTABS);
|
||||
|
||||
#ifdef XXX_DELAY
|
||||
SET(f, delaybits());
|
||||
#endif
|
||||
|
||||
if (n == 1) { /* read mode flags */
|
||||
if (RW) {
|
||||
iflag = 0;
|
||||
CLR(oflag, OPOST);
|
||||
CLR(cflag, CSIZE|PARENB);
|
||||
SET(cflag, CS8);
|
||||
lflag = 0;
|
||||
} else {
|
||||
CLR(lflag, ICANON);
|
||||
}
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (n == 0)
|
||||
goto out;
|
||||
|
||||
#if 0
|
||||
if (CB)
|
||||
SET(f, CRTBS);
|
||||
#endif
|
||||
|
||||
if (CE)
|
||||
SET(lflag, ECHOE);
|
||||
else
|
||||
CLR(lflag, ECHOE);
|
||||
|
||||
if (CK)
|
||||
SET(lflag, ECHOKE);
|
||||
else
|
||||
CLR(lflag, ECHOKE);
|
||||
|
||||
if (PE)
|
||||
SET(lflag, ECHOPRT);
|
||||
else
|
||||
CLR(lflag, ECHOPRT);
|
||||
|
||||
if (EC)
|
||||
SET(lflag, ECHO);
|
||||
else
|
||||
CLR(lflag, ECHO);
|
||||
|
||||
if (XC)
|
||||
SET(lflag, ECHOCTL);
|
||||
else
|
||||
CLR(lflag, ECHOCTL);
|
||||
|
||||
if (DX)
|
||||
SET(lflag, IXANY);
|
||||
else
|
||||
CLR(lflag, IXANY);
|
||||
|
||||
out:
|
||||
tmode.c_iflag = iflag;
|
||||
tmode.c_oflag = oflag;
|
||||
tmode.c_cflag = cflag;
|
||||
tmode.c_lflag = lflag;
|
||||
}
|
||||
|
||||
#ifdef COMPAT_43
|
||||
/*
|
||||
* Old TTY => termios, snatched from <sys/kern/tty_compat.c>
|
||||
*/
|
||||
void
|
||||
compatflags(flags)
|
||||
register long flags;
|
||||
{
|
||||
register tcflag_t iflag, oflag, cflag, lflag;
|
||||
|
||||
iflag = BRKINT|ICRNL|IMAXBEL|IXON|IXANY;
|
||||
oflag = OPOST|ONLCR|OXTABS;
|
||||
cflag = CREAD;
|
||||
lflag = ICANON|ISIG|IEXTEN;
|
||||
|
||||
if (ISSET(flags, TANDEM))
|
||||
SET(iflag, IXOFF);
|
||||
else
|
||||
CLR(iflag, IXOFF);
|
||||
if (ISSET(flags, ECHO))
|
||||
SET(lflag, ECHO);
|
||||
else
|
||||
CLR(lflag, ECHO);
|
||||
if (ISSET(flags, CRMOD)) {
|
||||
SET(iflag, ICRNL);
|
||||
SET(oflag, ONLCR);
|
||||
} else {
|
||||
CLR(iflag, ICRNL);
|
||||
CLR(oflag, ONLCR);
|
||||
}
|
||||
if (ISSET(flags, XTABS))
|
||||
SET(oflag, OXTABS);
|
||||
else
|
||||
CLR(oflag, OXTABS);
|
||||
|
||||
|
||||
if (ISSET(flags, RAW)) {
|
||||
iflag &= IXOFF;
|
||||
CLR(lflag, ISIG|ICANON|IEXTEN);
|
||||
CLR(cflag, PARENB);
|
||||
} else {
|
||||
SET(iflag, BRKINT|IXON|IMAXBEL);
|
||||
SET(lflag, ISIG|IEXTEN);
|
||||
if (ISSET(flags, CBREAK))
|
||||
CLR(lflag, ICANON);
|
||||
else
|
||||
SET(lflag, ICANON);
|
||||
switch (ISSET(flags, ANYP)) {
|
||||
case 0:
|
||||
CLR(cflag, PARENB);
|
||||
break;
|
||||
case ANYP:
|
||||
SET(cflag, PARENB);
|
||||
CLR(iflag, INPCK);
|
||||
break;
|
||||
case EVENP:
|
||||
SET(cflag, PARENB);
|
||||
SET(iflag, INPCK);
|
||||
CLR(cflag, PARODD);
|
||||
break;
|
||||
case ODDP:
|
||||
SET(cflag, PARENB);
|
||||
SET(iflag, INPCK);
|
||||
SET(cflag, PARODD);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Nothing we can do with CRTBS. */
|
||||
if (ISSET(flags, PRTERA))
|
||||
SET(lflag, ECHOPRT);
|
||||
else
|
||||
CLR(lflag, ECHOPRT);
|
||||
if (ISSET(flags, CRTERA))
|
||||
SET(lflag, ECHOE);
|
||||
else
|
||||
CLR(lflag, ECHOE);
|
||||
/* Nothing we can do with TILDE. */
|
||||
if (ISSET(flags, MDMBUF))
|
||||
SET(cflag, MDMBUF);
|
||||
else
|
||||
CLR(cflag, MDMBUF);
|
||||
if (ISSET(flags, NOHANG))
|
||||
CLR(cflag, HUPCL);
|
||||
else
|
||||
SET(cflag, HUPCL);
|
||||
if (ISSET(flags, CRTKIL))
|
||||
SET(lflag, ECHOKE);
|
||||
else
|
||||
CLR(lflag, ECHOKE);
|
||||
if (ISSET(flags, CTLECH))
|
||||
SET(lflag, ECHOCTL);
|
||||
else
|
||||
CLR(lflag, ECHOCTL);
|
||||
if (!ISSET(flags, DECCTQ))
|
||||
SET(iflag, IXANY);
|
||||
else
|
||||
CLR(iflag, IXANY);
|
||||
CLR(lflag, TOSTOP|FLUSHO|PENDIN|NOFLSH);
|
||||
SET(lflag, ISSET(flags, TOSTOP|FLUSHO|PENDIN|NOFLSH));
|
||||
|
||||
if (ISSET(flags, RAW|LITOUT|PASS8)) {
|
||||
CLR(cflag, CSIZE);
|
||||
SET(cflag, CS8);
|
||||
if (!ISSET(flags, RAW|PASS8))
|
||||
SET(iflag, ISTRIP);
|
||||
else
|
||||
CLR(iflag, ISTRIP);
|
||||
if (!ISSET(flags, RAW|LITOUT))
|
||||
SET(oflag, OPOST);
|
||||
else
|
||||
CLR(oflag, OPOST);
|
||||
} else {
|
||||
CLR(cflag, CSIZE);
|
||||
SET(cflag, CS7);
|
||||
SET(iflag, ISTRIP);
|
||||
SET(oflag, OPOST);
|
||||
}
|
||||
|
||||
tmode.c_iflag = iflag;
|
||||
tmode.c_oflag = oflag;
|
||||
tmode.c_cflag = cflag;
|
||||
tmode.c_lflag = lflag;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef XXX_DELAY
|
||||
struct delayval {
|
||||
unsigned delay; /* delay in ms */
|
||||
int bits;
|
||||
};
|
||||
|
||||
/*
|
||||
* below are random guesses, I can't be bothered checking
|
||||
*/
|
||||
|
||||
struct delayval crdelay[] = {
|
||||
{ 1, CR1 },
|
||||
{ 2, CR2 },
|
||||
{ 3, CR3 },
|
||||
{ 83, CR1 },
|
||||
{ 166, CR2 },
|
||||
{ 0, CR3 },
|
||||
};
|
||||
|
||||
struct delayval nldelay[] = {
|
||||
{ 1, NL1 }, /* special, calculated */
|
||||
{ 2, NL2 },
|
||||
{ 3, NL3 },
|
||||
{ 100, NL2 },
|
||||
{ 0, NL3 },
|
||||
};
|
||||
|
||||
struct delayval bsdelay[] = {
|
||||
{ 1, BS1 },
|
||||
{ 0, 0 },
|
||||
};
|
||||
|
||||
struct delayval ffdelay[] = {
|
||||
{ 1, FF1 },
|
||||
{ 1750, FF1 },
|
||||
{ 0, FF1 },
|
||||
};
|
||||
|
||||
struct delayval tbdelay[] = {
|
||||
{ 1, TAB1 },
|
||||
{ 2, TAB2 },
|
||||
{ 3, XTABS }, /* this is expand tabs */
|
||||
{ 100, TAB1 },
|
||||
{ 0, TAB2 },
|
||||
};
|
||||
|
||||
int
|
||||
delaybits()
|
||||
{
|
||||
register int f;
|
||||
|
||||
f = adelay(CD, crdelay);
|
||||
f |= adelay(ND, nldelay);
|
||||
f |= adelay(FD, ffdelay);
|
||||
f |= adelay(TD, tbdelay);
|
||||
f |= adelay(BD, bsdelay);
|
||||
return (f);
|
||||
}
|
||||
|
||||
int
|
||||
adelay(ms, dp)
|
||||
register ms;
|
||||
register struct delayval *dp;
|
||||
{
|
||||
if (ms == 0)
|
||||
return (0);
|
||||
while (dp->delay && ms > dp->delay)
|
||||
dp++;
|
||||
return (dp->bits);
|
||||
}
|
||||
#endif
|
||||
|
||||
char editedhost[32];
|
||||
|
||||
void
|
||||
edithost(pat)
|
||||
register char *pat;
|
||||
{
|
||||
register char *host = HN;
|
||||
register char *res = editedhost;
|
||||
|
||||
if (!pat)
|
||||
pat = "";
|
||||
while (*pat) {
|
||||
switch (*pat) {
|
||||
|
||||
case '#':
|
||||
if (*host)
|
||||
host++;
|
||||
break;
|
||||
|
||||
case '@':
|
||||
if (*host)
|
||||
*res++ = *host++;
|
||||
break;
|
||||
|
||||
default:
|
||||
*res++ = *pat;
|
||||
break;
|
||||
|
||||
}
|
||||
if (res == &editedhost[sizeof editedhost - 1]) {
|
||||
*res = '\0';
|
||||
return;
|
||||
}
|
||||
pat++;
|
||||
}
|
||||
if (*host)
|
||||
strncpy(res, host, sizeof editedhost - (res - editedhost) - 1);
|
||||
else
|
||||
*res = '\0';
|
||||
editedhost[sizeof editedhost - 1] = '\0';
|
||||
}
|
||||
|
||||
void
|
||||
makeenv(env)
|
||||
char *env[];
|
||||
{
|
||||
static char termbuf[128] = "TERM=";
|
||||
register char *p, *q;
|
||||
register char **ep;
|
||||
|
||||
ep = env;
|
||||
if (TT && *TT) {
|
||||
strcat(termbuf, TT);
|
||||
*ep++ = termbuf;
|
||||
}
|
||||
if (p = EV) {
|
||||
q = p;
|
||||
while (q = strchr(q, ',')) {
|
||||
*q++ = '\0';
|
||||
*ep++ = p;
|
||||
p = q;
|
||||
}
|
||||
if (*p)
|
||||
*ep++ = p;
|
||||
}
|
||||
*ep = (char *)0;
|
||||
}
|
||||
|
||||
/*
|
||||
* This speed select mechanism is written for the Develcon DATASWITCH.
|
||||
* The Develcon sends a string of the form "B{speed}\n" at a predefined
|
||||
* baud rate. This string indicates the user's actual speed.
|
||||
* The routine below returns the terminal type mapped from derived speed.
|
||||
*/
|
||||
struct portselect {
|
||||
char *ps_baud;
|
||||
char *ps_type;
|
||||
} portspeeds[] = {
|
||||
{ "B110", "std.110" },
|
||||
{ "B134", "std.134" },
|
||||
{ "B150", "std.150" },
|
||||
{ "B300", "std.300" },
|
||||
{ "B600", "std.600" },
|
||||
{ "B1200", "std.1200" },
|
||||
{ "B2400", "std.2400" },
|
||||
{ "B4800", "std.4800" },
|
||||
{ "B9600", "std.9600" },
|
||||
{ "B19200", "std.19200" },
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
char *
|
||||
portselector()
|
||||
{
|
||||
char c, baud[20], *type = "default";
|
||||
register struct portselect *ps;
|
||||
int len;
|
||||
|
||||
alarm(5*60);
|
||||
for (len = 0; len < sizeof (baud) - 1; len++) {
|
||||
if (read(STDIN_FILENO, &c, 1) <= 0)
|
||||
break;
|
||||
c &= 0177;
|
||||
if (c == '\n' || c == '\r')
|
||||
break;
|
||||
if (c == 'B')
|
||||
len = 0; /* in case of leading garbage */
|
||||
baud[len] = c;
|
||||
}
|
||||
baud[len] = '\0';
|
||||
for (ps = portspeeds; ps->ps_baud; ps++)
|
||||
if (strcmp(ps->ps_baud, baud) == 0) {
|
||||
type = ps->ps_type;
|
||||
break;
|
||||
}
|
||||
sleep(2); /* wait for connection to complete */
|
||||
return (type);
|
||||
}
|
||||
|
||||
/*
|
||||
* This auto-baud speed select mechanism is written for the Micom 600
|
||||
* portselector. Selection is done by looking at how the character '\r'
|
||||
* is garbled at the different speeds.
|
||||
*/
|
||||
#include <sys/time.h>
|
||||
|
||||
char *
|
||||
autobaud()
|
||||
{
|
||||
int rfds;
|
||||
struct timeval timeout;
|
||||
char c, *type = "9600-baud";
|
||||
|
||||
(void)tcflush(0, TCIOFLUSH);
|
||||
rfds = 1 << 0;
|
||||
timeout.tv_sec = 5;
|
||||
timeout.tv_usec = 0;
|
||||
if (select(32, (fd_set *)&rfds, (fd_set *)NULL,
|
||||
(fd_set *)NULL, &timeout) <= 0)
|
||||
return (type);
|
||||
if (read(STDIN_FILENO, &c, sizeof(char)) != sizeof(char))
|
||||
return (type);
|
||||
timeout.tv_sec = 0;
|
||||
timeout.tv_usec = 20;
|
||||
(void) select(32, (fd_set *)NULL, (fd_set *)NULL,
|
||||
(fd_set *)NULL, &timeout);
|
||||
(void)tcflush(0, TCIOFLUSH);
|
||||
switch (c & 0377) {
|
||||
|
||||
case 0200: /* 300-baud */
|
||||
type = "300-baud";
|
||||
break;
|
||||
|
||||
case 0346: /* 1200-baud */
|
||||
type = "1200-baud";
|
||||
break;
|
||||
|
||||
case 015: /* 2400-baud */
|
||||
case 0215:
|
||||
type = "2400-baud";
|
||||
break;
|
||||
|
||||
default: /* 4800-baud */
|
||||
type = "4800-baud";
|
||||
break;
|
||||
|
||||
case 0377: /* 9600-baud */
|
||||
type = "9600-baud";
|
||||
break;
|
||||
}
|
||||
return (type);
|
||||
}
|
153
libexec/getty/ttys.5
Normal file
153
libexec/getty/ttys.5
Normal file
@ -0,0 +1,153 @@
|
||||
.\" Copyright (c) 1985, 1991, 1993
|
||||
.\" The Regents of the University of California. 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 the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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.
|
||||
.\"
|
||||
.\" from: @(#)ttys.5 8.1 (Berkeley) 6/4/93
|
||||
.\" $Id: ttys.5,v 1.6 1994/08/17 20:10:41 pk Exp $
|
||||
.\"
|
||||
.Dd June 4, 1993
|
||||
.Dt TTYS 5
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm ttys
|
||||
.Nd terminal initialization information
|
||||
.Sh DESCRIPTION
|
||||
The file
|
||||
.Nm ttys
|
||||
contains information that is used by various routines to initialize
|
||||
and control the use of terminal special files.
|
||||
This information is read with the
|
||||
.Xr getttyent 3
|
||||
library routines.
|
||||
There is one line in the
|
||||
.Nm ttys
|
||||
file per special device file.
|
||||
Fields are separated by tabs and/or spaces.
|
||||
Fields comprised of more than one word should be enclosed in double
|
||||
quotes (``"'').
|
||||
Blank lines and comments may appear anywhere in the file; comments
|
||||
are delimited by hash marks (``#'') and new lines.
|
||||
Any unspecified fields will default to null.
|
||||
.Pp
|
||||
The first field is the
|
||||
name of the terminal special file as it is found in
|
||||
.Pa /dev .
|
||||
.Pp
|
||||
The second field of the file is the command to execute for the line,
|
||||
usually
|
||||
.Xr getty 8 ,
|
||||
which initializes and opens the line, setting the speed, waiting for
|
||||
a user name and executing the
|
||||
.Xr login 1
|
||||
program.
|
||||
It can be, however, any desired command, for example
|
||||
the start up for a window system terminal emulator or some other
|
||||
daemon process, and can contain multiple words if quoted.
|
||||
.Pp
|
||||
The third field is the type of terminal usually connected to that
|
||||
tty line, normally the one found in the
|
||||
.Xr termcap 5
|
||||
data base file.
|
||||
The environment variable
|
||||
.Dv TERM
|
||||
is initialized with the value by
|
||||
either
|
||||
.Xr getty 8
|
||||
or
|
||||
.Xr login 1 .
|
||||
.Pp
|
||||
The remaining fields set flags in the
|
||||
.Fa ty_status
|
||||
entry (see
|
||||
.Xr getttyent 3 )
|
||||
or specify a window system process that
|
||||
.Xr init 8
|
||||
will maintain for the terminal line.
|
||||
.Pp
|
||||
As flag values, the strings ``on'' and ``off'' specify that
|
||||
.Xr init
|
||||
should (should not) execute the command given in the second field,
|
||||
while ``secure'' (if ``on'' is also specified) allows users with a
|
||||
uid of 0 to login on
|
||||
this line.
|
||||
The flags ``local'', ``rtscts'', ``mdmbuf'', and ``softcar''
|
||||
modify the default behaviour of the terminal line, and their actions
|
||||
are driver dependent.
|
||||
The ``local'' flag causes the driver to
|
||||
treat the line as if it locally connected.
|
||||
The ``rtscts'' flag
|
||||
instructs the driver to use RTS/CTS hardware flow control, if
|
||||
possible.
|
||||
The ``mdmbuf'' flag instructs the driver to use
|
||||
DTR/DCD flow control, if possible.
|
||||
The ``softcar'' flag causes the driver to ignore
|
||||
hardware carrier on the line.
|
||||
These flag fields should not be quoted.
|
||||
.Pp
|
||||
The string ``window='' may be followed by a quoted command
|
||||
string which
|
||||
.Xr init
|
||||
will execute
|
||||
.Em before
|
||||
starting the command specified by the second field.
|
||||
.Sh EXAMPLES
|
||||
.Bd -literal
|
||||
# root login on console at 1200 baud
|
||||
console "/usr/libexec/getty std.1200" vt100 on secure
|
||||
# dialup at 1200 baud, no root logins
|
||||
ttyd0 "/usr/libexec/getty d1200" dialup on # 555-1234
|
||||
# Mike's terminal: hp2621
|
||||
ttyh0 "/usr/libexec/getty std.9600" hp2621-nl on # 457 Evans
|
||||
# John's terminal: vt100
|
||||
ttyh1 "/usr/libexec/getty std.9600" vt100 on # 459 Evans
|
||||
# terminal emulate/window system
|
||||
ttyv0 "/usr/new/xterm -L :0" vs100 on window="/usr/new/Xvs100 0"
|
||||
# Network pseudo ttys -- don't enable getty
|
||||
ttyp0 none network
|
||||
ttyp1 none network off
|
||||
.Ed
|
||||
.Sh FILES
|
||||
.Bl -tag -width /etc/ttys -compact
|
||||
.It Pa /etc/ttys
|
||||
.El
|
||||
.Sh SEE ALSO
|
||||
.Xr login 1 ,
|
||||
.Xr getttyent 3 ,
|
||||
.Xr ttyslot 3 ,
|
||||
.Xr gettytab 5 ,
|
||||
.Xr termcap 5 ,
|
||||
.Xr getty 8 ,
|
||||
.Xr init 8 ,
|
||||
.Xr ttyflags 8
|
||||
.Sh HISTORY
|
||||
A
|
||||
.Nm
|
||||
file appeared in
|
||||
.At v6 .
|
Loading…
Reference in New Issue
Block a user