xref: /dragonfly/libexec/getty/init.c (revision cbcac60ab2a6e4eb0aaafcfecbd34881e5076f81)
1 /*-
2  * SPDX-License-Identifier: BSD-3-Clause
3  *
4  * Copyright (c) 1983, 1993
5  *        The Regents of the University of California.  All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  * 3. Neither the name of the University nor the names of its contributors
16  *    may be used to endorse or promote products derived from this software
17  *    without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29  * SUCH DAMAGE.
30  *
31  * @(#)from: init.c 8.1 (Berkeley) 6/4/93
32  * $FreeBSD: head/libexec/getty/init.c 328846 2018-02-04 13:58:31Z trasz $
33  */
34 
35 /*
36  * Getty table initializations.
37  *
38  * Melbourne getty.
39  */
40 #include <stdio.h>
41 #include <termios.h>
42 #include "gettytab.h"
43 #include "extern.h"
44 #include "pathnames.h"
45 
46 static char loginmsg[] = "login: ";
47 static char nullstr[] = "";
48 static char loginprg[] = _PATH_LOGIN;
49 static char datefmt[] = "%+";
50 
51 #define M(a) (&omode.c_cc[a])
52 
53 struct    gettystrs gettystrs[] = {
54           { "nx", NULL, NULL },                   /* next table */
55           { "cl", NULL, NULL },                   /* screen clear characters */
56           { "im", NULL, NULL },                   /* initial message */
57           { "lm", loginmsg, NULL },     /* login message */
58           { "er", M(VERASE), NULL },    /* erase character */
59           { "kl", M(VKILL), NULL },     /* kill character */
60           { "et", M(VEOF), NULL },      /* eof chatacter (eot) */
61           { "pc", nullstr, NULL },      /* pad character */
62           { "tt", NULL, NULL },                   /* terminal type */
63           { "ev", NULL, NULL },                   /* environment */
64           { "lo", loginprg, NULL },     /* login program */
65           { "hn", hostname, NULL },     /* host name */
66           { "he", NULL, NULL },                   /* host name edit */
67           { "in", M(VINTR), NULL },     /* interrupt char */
68           { "qu", M(VQUIT), NULL },     /* quit char */
69           { "xn", M(VSTART), NULL },    /* XON (start) char */
70           { "xf", M(VSTOP), NULL },     /* XOFF (stop) char */
71           { "bk", M(VEOL), NULL },      /* brk char (alt \n) */
72           { "su", M(VSUSP), NULL },     /* suspend char */
73           { "ds", M(VDSUSP), NULL },    /* delayed suspend */
74           { "rp", M(VREPRINT), NULL },  /* reprint char */
75           { "fl", M(VDISCARD), NULL },  /* flush output */
76           { "we", M(VWERASE), NULL },   /* word erase */
77           { "ln", M(VLNEXT), NULL },    /* literal next */
78           { "Lo", NULL, NULL },                   /* locale for strftime() */
79           { "pp", NULL, NULL },                   /* ppp login program */
80           { "if", NULL, NULL },                   /* sysv-like 'issue' filename */
81           { "ic", NULL, NULL },                   /* modem init-chat */
82           { "ac", NULL, NULL },                   /* modem answer-chat */
83           { "al", NULL, NULL },                   /* user to auto-login */
84           { "df", datefmt, NULL },      /* format for strftime() */
85           { "iM" , NULL, NULL },                  /* initial message program */
86           { NULL, NULL, NULL }
87 };
88 
89 struct    gettynums gettynums[] = {
90           { "is", 0, 0, 0 },            /* input speed */
91           { "os", 0, 0, 0 },            /* output speed */
92           { "sp", 0, 0, 0 },            /* both speeds */
93           { "nd", 0, 0, 0 },            /* newline delay */
94           { "cd", 0, 0, 0 },            /* carriage-return delay */
95           { "td", 0, 0, 0 },            /* tab delay */
96           { "fd", 0, 0, 0 },            /* form-feed delay */
97           { "bd", 0, 0, 0 },            /* backspace delay */
98           { "to", 0, 0, 0 },            /* timeout */
99           { "f0", 0, 0, 0 },            /* output flags */
100           { "f1", 0, 0, 0 },            /* input flags */
101           { "f2", 0, 0, 0 },            /* user mode flags */
102           { "pf", 0, 0, 0 },            /* delay before flush at 1st prompt */
103           { "c0", 0, 0, 0 },            /* output c_flags */
104           { "c1", 0, 0, 0 },            /* input c_flags */
105           { "c2", 0, 0, 0 },            /* user mode c_flags */
106           { "i0", 0, 0, 0 },            /* output i_flags */
107           { "i1", 0, 0, 0 },            /* input i_flags */
108           { "i2", 0, 0, 0 },            /* user mode i_flags */
109           { "l0", 0, 0, 0 },            /* output l_flags */
110           { "l1", 0, 0, 0 },            /* input l_flags */
111           { "l2", 0, 0, 0 },            /* user mode l_flags */
112           { "o0", 0, 0, 0 },            /* output o_flags */
113           { "o1", 0, 0, 0 },            /* input o_flags */
114           { "o2", 0, 0, 0 },            /* user mode o_flags */
115           { "de", 0, 0, 0 },            /* delay before sending 1st prompt */
116           { "rt", 0, 0, 0 },            /* reset timeout */
117           { "ct", 0, 0, 0 },            /* chat script timeout */
118           { "dc", 0, 0, 0 },            /* debug chat script value */
119           { NULL, 0, 0, 0 }
120 };
121 
122 
123 struct    gettyflags gettyflags[] = {
124           { "ht",   0, 0, 0, 0 },                 /* has tabs */
125           { "nl",   1, 0, 0, 0 },                 /* has newline char */
126           { "ep",   0, 0, 0, 0 },                 /* even parity */
127           { "op",   0, 0, 0, 0 },                 /* odd parity */
128           { "ap",   0, 0, 0, 0 },                 /* any parity */
129           { "ec",   1, 0, 0, 0 },                 /* no echo */
130           { "co",   0, 0, 0, 0 },                 /* console special */
131           { "cb",   0, 0, 0, 0 },                 /* crt backspace */
132           { "ck",   0, 0, 0, 0 },                 /* crt kill */
133           { "ce",   0, 0, 0, 0 },                 /* crt erase */
134           { "pe",   0, 0, 0, 0 },                 /* printer erase */
135           { "rw",   1, 0, 0, 0 },                 /* don't use raw */
136           { "xc",   1, 0, 0, 0 },                 /* don't ^X ctl chars */
137           { "lc",   0, 0, 0, 0 },                 /* terminal las lower case */
138           { "uc",   0, 0, 0, 0 },                 /* terminal has no lower case */
139           { "ig",   0, 0, 0, 0 },                 /* ignore garbage */
140           { "ps",   0, 0, 0, 0 },                 /* do port selector speed select */
141           { "hc",   1, 0, 0, 0 },                 /* don't set hangup on close */
142           { "ub", 0, 0, 0, 0 },                   /* unbuffered output */
143           { "ab", 0, 0, 0, 0 },                   /* auto-baud detect with '\r' */
144           { "dx", 0, 0, 0, 0 },                   /* set decctlq */
145           { "np", 0, 0, 0, 0 },                   /* no parity at all (8bit chars) */
146           { "mb", 0, 0, 0, 0 },                   /* do MDMBUF flow control */
147           { "hw", 0, 0, 0, 0 },                   /* do CTSRTS flow control */
148           { "nc", 0, 0, 0, 0 },                   /* set clocal (no carrier) */
149           { "pl", 0, 0, 0, 0 },                   /* use PPP instead of login(1) */
150           { NULL, 0, 0, 0, 0 }
151 };
152