MFC: no \n in syslog strings. Change -P to -p in flags. EOF -> -1. Use err(3).
This commit is contained in:
parent
9cdce0445e
commit
e76bb0fc60
@ -32,7 +32,11 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static const char sccsid[] = "@(#)authenc.c 8.2 (Berkeley) 5/30/95";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
#endif /* not lint */
|
||||
|
||||
#if defined(AUTHENTICATION) || defined(ENCRYPTION)
|
||||
@ -75,7 +79,6 @@ telnet_spin()
|
||||
telnet_getenv(val)
|
||||
char *val;
|
||||
{
|
||||
extern char *getenv();
|
||||
return(getenv(val));
|
||||
}
|
||||
|
||||
|
@ -32,7 +32,11 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static const char sccsid[] = "@(#)global.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
|
@ -32,14 +32,18 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static const char sccsid[] = "@(#)slc.c 8.2 (Berkeley) 5/30/95";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
#endif /* not lint */
|
||||
|
||||
#include "telnetd.h"
|
||||
|
||||
#ifdef LINEMODE
|
||||
/*
|
||||
* local varibles
|
||||
* local variables
|
||||
*/
|
||||
static unsigned char *def_slcbuf = (unsigned char *)0;
|
||||
static int def_slclen = 0;
|
||||
|
@ -32,7 +32,11 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static const char sccsid[] = "@(#)state.c 8.5 (Berkeley) 5/30/95";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
#endif /* not lint */
|
||||
|
||||
#include "telnetd.h"
|
||||
@ -358,7 +362,7 @@ gotiac: switch (c) {
|
||||
continue;
|
||||
|
||||
default:
|
||||
syslog(LOG_ERR, "telnetd: panic state=%d\n", state);
|
||||
syslog(LOG_ERR, "panic state=%d", state);
|
||||
printf("telnetd: panic state=%d\n", state);
|
||||
exit(1);
|
||||
}
|
||||
|
@ -32,7 +32,11 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static const char sccsid[] = "@(#)sys_term.c 8.4+1 (Berkeley) 5/30/95";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
#endif /* not lint */
|
||||
|
||||
#include "telnetd.h"
|
||||
@ -184,6 +188,12 @@ int ttyfd = -1;
|
||||
# endif
|
||||
#endif /* USE_TERMIO */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <libutil.h>
|
||||
|
||||
int cleanopen __P((char *));
|
||||
void scrub_env __P((void));
|
||||
|
||||
/*
|
||||
* init_termbuf()
|
||||
* copy_termbuf(cp)
|
||||
@ -1000,7 +1010,7 @@ struct termspeeds {
|
||||
#endif
|
||||
{ -1, 0 }
|
||||
};
|
||||
#endif /* DECODE_BUAD */
|
||||
#endif /* DECODE_BAUD */
|
||||
|
||||
void
|
||||
tty_tspeed(val)
|
||||
@ -1014,9 +1024,9 @@ tty_tspeed(val)
|
||||
if (tp->speed == -1) /* back up to last valid value */
|
||||
--tp;
|
||||
cfsetospeed(&termbuf, tp->value);
|
||||
#else /* DECODE_BUAD */
|
||||
#else /* DECODE_BAUD */
|
||||
cfsetospeed(&termbuf, val);
|
||||
#endif /* DECODE_BUAD */
|
||||
#endif /* DECODE_BAUD */
|
||||
}
|
||||
|
||||
void
|
||||
@ -1075,8 +1085,7 @@ extern void utmp_sig_notify P((int));
|
||||
* getptyslave()
|
||||
*
|
||||
* Open the slave side of the pty, and do any initialization
|
||||
* that is necessary. The return value is a file descriptor
|
||||
* for the slave side.
|
||||
* that is necessary.
|
||||
*/
|
||||
void
|
||||
getptyslave()
|
||||
@ -1789,7 +1798,7 @@ start_login(host, autologin, name)
|
||||
}
|
||||
execv(altlogin, argv);
|
||||
|
||||
syslog(LOG_ERR, "%s: %m\n", altlogin);
|
||||
syslog(LOG_ERR, "%s: %m", altlogin);
|
||||
fatalperror(net, altlogin);
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
@ -2088,7 +2097,7 @@ cleantmp(wtp)
|
||||
|
||||
utp = getutid(wtp);
|
||||
if (utp == 0) {
|
||||
syslog(LOG_ERR, "Can't get /etc/utmp entry to clean TMPDIR");
|
||||
syslog(LOG_ERR, "can't get /etc/utmp entry to clean TMPDIR");
|
||||
return(-1);
|
||||
}
|
||||
/*
|
||||
@ -2176,12 +2185,12 @@ cleantmpdir(jid, tpath, user)
|
||||
{
|
||||
switch(fork()) {
|
||||
case -1:
|
||||
syslog(LOG_ERR, "TMPDIR cleanup(%s): fork() failed: %m\n",
|
||||
syslog(LOG_ERR, "TMPDIR cleanup(%s): fork() failed: %m",
|
||||
tpath);
|
||||
break;
|
||||
case 0:
|
||||
execl(CLEANTMPCMD, CLEANTMPCMD, user, tpath, 0);
|
||||
syslog(LOG_ERR, "TMPDIR cleanup(%s): execl(%s) failed: %m\n",
|
||||
syslog(LOG_ERR, "TMPDIR cleanup(%s): execl(%s) failed: %m",
|
||||
tpath, CLEANTMPCMD);
|
||||
exit(1);
|
||||
default:
|
||||
|
@ -48,13 +48,13 @@ protocol server
|
||||
.Op Fl X Ar authtype
|
||||
.Op Fl a Ar authmode
|
||||
.Op Fl edebug
|
||||
.Op Fl P Ar loginprog
|
||||
.Op Fl p Ar loginprog
|
||||
.Op Fl r Ns Ar lowpty-highpty
|
||||
.Op Fl u Ar len
|
||||
.Op Fl debug Op Ar port
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
command is a server which supports the
|
||||
.Tn DARPA
|
||||
standard
|
||||
@ -68,45 +68,45 @@ for requests to connect to the
|
||||
port as indicated by the
|
||||
.Pa /etc/services
|
||||
file (see
|
||||
.Xr services 5 ) .
|
||||
.Xr services 5 ).
|
||||
The
|
||||
.Fl debug
|
||||
option may be used to start up
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
manually, instead of through
|
||||
.Xr inetd 8 .
|
||||
If started up this way,
|
||||
.Ar port
|
||||
may be specified to run
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
on an alternate
|
||||
.Tn TCP
|
||||
port number.
|
||||
.Pp
|
||||
The
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
command accepts the following options:
|
||||
.Bl -tag -width "-a authmode"
|
||||
.Bl -tag -width indent
|
||||
.It Fl a Ar authmode
|
||||
This option may be used for specifying what mode should
|
||||
be used for authentication.
|
||||
Note that this option is only useful if
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
has been compiled with support for the
|
||||
.Dv AUTHENTICATION
|
||||
option.
|
||||
There are several valid values for
|
||||
.Ar authmode:
|
||||
.Ar authmode :
|
||||
.Bl -tag -width debug
|
||||
.It debug
|
||||
Turns on authentication debugging code.
|
||||
.It user
|
||||
.It Cm debug
|
||||
Turn on authentication debugging code.
|
||||
.It Cm user
|
||||
Only allow connections when the remote user
|
||||
can provide valid authentication information
|
||||
to identify the remote user,
|
||||
and is allowed access to the specified account
|
||||
without providing a password.
|
||||
.It valid
|
||||
.It Cm valid
|
||||
Only allow connections when the remote user
|
||||
can provide valid authentication information
|
||||
to identify the remote user.
|
||||
@ -115,14 +115,14 @@ The
|
||||
command will provide any additional user verification
|
||||
needed if the remote user is not allowed automatic
|
||||
access to the specified account.
|
||||
.It other
|
||||
.It Cm other
|
||||
Only allow connections that supply some authentication information.
|
||||
This option is currently not supported
|
||||
by any of the existing authentication mechanisms,
|
||||
and is thus the same as specifying
|
||||
.Fl a
|
||||
.Cm valid .
|
||||
.It none
|
||||
.It Cm none
|
||||
This is the default state.
|
||||
Authentication information is not required.
|
||||
If no or insufficient authentication information
|
||||
@ -130,15 +130,15 @@ is provided, then the
|
||||
.Xr login 1
|
||||
program will provide the necessary user
|
||||
verification.
|
||||
.It off
|
||||
This disables the authentication code.
|
||||
.It Cm off
|
||||
Disable the authentication code.
|
||||
All user verification will happen through the
|
||||
.Xr login 1
|
||||
program.
|
||||
.El
|
||||
.It Fl B
|
||||
Specifies bftp server mode. In this mode,
|
||||
.Nm telnetd
|
||||
Specify bftp server mode. In this mode,
|
||||
.Nm
|
||||
causes login to start a
|
||||
.Xr bftp 1
|
||||
session rather than the user's
|
||||
@ -150,51 +150,51 @@ port.
|
||||
.It Fl D Ar debugmode
|
||||
This option may be used for debugging purposes.
|
||||
This allows
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
to print out debugging information
|
||||
to the connection, allowing the user to see what
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
is doing.
|
||||
There are several possible values for
|
||||
.Ar debugmode:
|
||||
.Ar debugmode :
|
||||
.Bl -tag -width exercise
|
||||
.It Cm options
|
||||
Prints information about the negotiation of
|
||||
Print information about the negotiation of
|
||||
.Tn TELNET
|
||||
options.
|
||||
.It Cm report
|
||||
Prints the
|
||||
Print the
|
||||
.Cm options
|
||||
information, plus some additional information
|
||||
about what processing is going on.
|
||||
.It Cm netdata
|
||||
Displays the data stream received by
|
||||
.Nm telnetd.
|
||||
Display the data stream received by
|
||||
.Nm Ns .
|
||||
.It Cm ptydata
|
||||
Displays data written to the pty.
|
||||
Display data written to the pty.
|
||||
.It Cm exercise
|
||||
Has not been implemented yet.
|
||||
.El
|
||||
.It Fl debug
|
||||
Enables debugging on each socket created by
|
||||
.Nm telnetd
|
||||
Enable debugging on each socket created by
|
||||
.Nm
|
||||
(see
|
||||
.Dv SO_DEBUG
|
||||
in
|
||||
.Xr socket 2 ) .
|
||||
.It Fl edebug
|
||||
If
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
has been compiled with support for data encryption, then the
|
||||
.Fl edebug
|
||||
option may be used to enable encryption debugging code.
|
||||
.It Fl P Ar loginprog
|
||||
Specifies an alternate
|
||||
.It Fl p Ar loginprog
|
||||
Specify an alternate
|
||||
.Xr login 1
|
||||
command to run to complete the login. The alternate command must
|
||||
understand the same command arguments as the standard login.
|
||||
.It Fl h
|
||||
Disables the printing of host-specific information before
|
||||
Disable the printing of host-specific information before
|
||||
login has been completed.
|
||||
.It Fl I Ar initid
|
||||
This option is only applicable to
|
||||
@ -210,7 +210,7 @@ is
|
||||
.Dv fe.
|
||||
.It Fl k
|
||||
This option is only useful if
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
has been compiled with both linemode and kludge linemode
|
||||
support. If the
|
||||
.Fl k
|
||||
@ -218,12 +218,12 @@ option is specified, then if the remote client does not
|
||||
support the
|
||||
.Dv LINEMODE
|
||||
option, then
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
will operate in character at a time mode.
|
||||
It will still support kludge linemode, but will only
|
||||
go into kludge linemode if the remote client requests
|
||||
it.
|
||||
(This is done by by the client sending
|
||||
(This is done by the client sending
|
||||
.Dv DONT SUPPRESS-GO-AHEAD
|
||||
and
|
||||
.Dv DONT ECHO . )
|
||||
@ -237,7 +237,7 @@ in response to a
|
||||
.Dv DO TIMING-MARK)
|
||||
for kludge linemode support.
|
||||
.It Fl l
|
||||
Specifies line mode. Tries to force clients to use line-
|
||||
Specify line mode. Try to force clients to use line-
|
||||
at-a-time mode.
|
||||
If the
|
||||
.Dv LINEMODE
|
||||
@ -247,7 +247,7 @@ into kludge linemode.
|
||||
Disable
|
||||
.Dv TCP
|
||||
keep-alives. Normally
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
enables the
|
||||
.Tn TCP
|
||||
keep-alive mechanism to probe connections that
|
||||
@ -257,7 +257,7 @@ from machines that have crashed or can no longer
|
||||
be reached may be cleaned up.
|
||||
.It Fl r Ar lowpty-highpty
|
||||
This option is only enabled when
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
is compiled for
|
||||
.Dv UNICOS.
|
||||
It specifies an inclusive range of pseudo-terminal devices to
|
||||
@ -273,14 +273,14 @@ may be omitted to allow changing
|
||||
either end of the search range. If
|
||||
.Ar lowpty
|
||||
is omitted, the - character is still required so that
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
can differentiate
|
||||
.Ar highpty
|
||||
from
|
||||
.Ar lowpty .
|
||||
.It Fl s
|
||||
This option is only enabled if
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
is compiled with support for
|
||||
.Tn SecurID
|
||||
cards.
|
||||
@ -317,7 +317,7 @@ file.
|
||||
.ne 1i
|
||||
.It Fl U
|
||||
This option causes
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
to refuse connections from addresses that
|
||||
cannot be mapped back into a symbolic name
|
||||
via the
|
||||
@ -325,14 +325,14 @@ via the
|
||||
routine.
|
||||
.It Fl X Ar authtype
|
||||
This option is only valid if
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
has been built with support for the authentication option.
|
||||
It disables the use of
|
||||
.Ar authtype
|
||||
authentication, and
|
||||
can be used to temporarily disable
|
||||
a specific authentication type without having to recompile
|
||||
.Nm telnetd .
|
||||
.Nm Ns .
|
||||
.El
|
||||
.Pp
|
||||
.Nm Telnetd
|
||||
@ -354,7 +354,7 @@ between the remote client and the login process.
|
||||
When a
|
||||
.Tn TELNET
|
||||
session is started up,
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
sends
|
||||
.Tn TELNET
|
||||
options to the client side indicating
|
||||
@ -403,25 +403,25 @@ current state of terminal echoing.
|
||||
When terminal echo is not desired, a
|
||||
.Dv WILL ECHO
|
||||
is sent to indicate that
|
||||
.Tn telnetd
|
||||
.Nm
|
||||
will take care of echoing any data that needs to be
|
||||
echoed to the terminal, and then nothing is echoed.
|
||||
When terminal echo is desired, a
|
||||
.Dv WONT ECHO
|
||||
is sent to indicate that
|
||||
.Tn telnetd
|
||||
.Nm
|
||||
will not be doing any terminal echoing, so the
|
||||
client should do any terminal echoing that is needed.
|
||||
.It "WILL BINARY"
|
||||
Indicates that the client is willing to send a
|
||||
Indicate that the client is willing to send a
|
||||
8 bits of data, rather than the normal 7 bits
|
||||
of the Network Virtual Terminal.
|
||||
.It "WILL SGA"
|
||||
Indicates that it will not be sending
|
||||
Indicate that it will not be sending
|
||||
.Dv IAC GA,
|
||||
go ahead, commands.
|
||||
.It "WILL STATUS"
|
||||
Indicates a willingness to send the client, upon
|
||||
Indicate a willingness to send the client, upon
|
||||
request, of the current status of all
|
||||
.Tn TELNET
|
||||
options.
|
||||
@ -442,7 +442,7 @@ is sent in response, and the
|
||||
session is shut down.
|
||||
.It "WILL ENCRYPT"
|
||||
Only sent if
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
is compiled with support for data encryption, and
|
||||
indicates a willingness to decrypt
|
||||
the data stream.
|
||||
@ -455,7 +455,7 @@ options:
|
||||
.Bl -tag -width "DO AUTHENTICATION"
|
||||
.It "DO BINARY"
|
||||
Sent to indicate that
|
||||
.Tn telnetd
|
||||
.Nm
|
||||
is willing to receive an 8 bit data stream.
|
||||
.It "DO LFLOW"
|
||||
Requests that the client handle flow control
|
||||
@ -471,38 +471,38 @@ is received, a
|
||||
.Dv DONT ECHO
|
||||
will be sent in response.
|
||||
.It "DO TERMINAL-TYPE"
|
||||
Indicates a desire to be able to request the
|
||||
Indicate a desire to be able to request the
|
||||
name of the type of terminal that is attached
|
||||
to the client side of the connection.
|
||||
.It "DO SGA"
|
||||
Indicates that it does not need to receive
|
||||
Indicate that it does not need to receive
|
||||
.Dv IAC GA,
|
||||
the go ahead command.
|
||||
.It "DO NAWS"
|
||||
Requests that the client inform the server when
|
||||
the window (display) size changes.
|
||||
.It "DO TERMINAL-SPEED"
|
||||
Indicates a desire to be able to request information
|
||||
Indicate a desire to be able to request information
|
||||
about the speed of the serial line to which
|
||||
the client is attached.
|
||||
.It "DO XDISPLOC"
|
||||
Indicates a desire to be able to request the name
|
||||
of the X windows display that is associated with
|
||||
Indicate a desire to be able to request the name
|
||||
of the X Window System display that is associated with
|
||||
the telnet client.
|
||||
.It "DO NEW-ENVIRON"
|
||||
Indicates a desire to be able to request environment
|
||||
Indicate a desire to be able to request environment
|
||||
variable information, as described in RFC 1572.
|
||||
.It "DO ENVIRON"
|
||||
Indicates a desire to be able to request environment
|
||||
Indicate a desire to be able to request environment
|
||||
variable information, as described in RFC 1408.
|
||||
.It "DO LINEMODE"
|
||||
Only sent if
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
is compiled with support for linemode, and
|
||||
requests that the client do line by line processing.
|
||||
.It "DO TIMING-MARK"
|
||||
Only sent if
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
is compiled with support for both linemode and
|
||||
kludge linemode, and the client responded with
|
||||
.Dv WONT LINEMODE.
|
||||
@ -515,28 +515,27 @@ Note that the
|
||||
option can be used to disable this.
|
||||
.It "DO AUTHENTICATION"
|
||||
Only sent if
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
is compiled with support for authentication, and
|
||||
indicates a willingness to receive authentication
|
||||
information for automatic login.
|
||||
.It "DO ENCRYPT"
|
||||
Only sent if
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
is compiled with support for data encryption, and
|
||||
indicates a willingness to decrypt
|
||||
the data stream.
|
||||
.Sh ENVIRONMENT
|
||||
.Sh FILES
|
||||
.Pa /etc/services
|
||||
.br
|
||||
.Pa /etc/inittab
|
||||
.Bl -tag -width /usr/ucb/bftp -compact
|
||||
.It Pa /etc/services
|
||||
.It Pa /etc/inittab
|
||||
(UNICOS systems only)
|
||||
.br
|
||||
.Pa /etc/iptos
|
||||
.It Pa /etc/iptos
|
||||
(if supported)
|
||||
.br
|
||||
.Pa /usr/ucb/bftp
|
||||
.It Pa /usr/ucb/bftp
|
||||
(if supported)
|
||||
.El
|
||||
.Sh "SEE ALSO"
|
||||
.Xr bftp 1 ,
|
||||
.Xr login 1 ,
|
||||
@ -594,7 +593,7 @@ commands are only partially implemented.
|
||||
.Pp
|
||||
Because of bugs in the original 4.2 BSD
|
||||
.Xr telnet 1 ,
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
performs some dubious protocol exchanges to try to discover if the remote
|
||||
client is, in fact, a 4.2 BSD
|
||||
.Xr telnet 1 .
|
||||
|
@ -38,7 +38,11 @@ static const char copyright[] =
|
||||
#endif /* not lint */
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static const char sccsid[] = "@(#)telnetd.c 8.4 (Berkeley) 5/30/95";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
#endif /* not lint */
|
||||
|
||||
#include "telnetd.h"
|
||||
@ -53,6 +57,9 @@ static const char sccsid[] = "@(#)telnetd.c 8.4 (Berkeley) 5/30/95";
|
||||
# undef _SC_CRAY_SECURE_SYS
|
||||
#endif
|
||||
|
||||
#include <err.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#if defined(_SC_CRAY_SECURE_SYS)
|
||||
#include <sys/sysv.h>
|
||||
#include <sys/secdev.h>
|
||||
@ -132,9 +139,11 @@ int lowpty = 0, highpty; /* low, high pty numbers */
|
||||
|
||||
int debug = 0;
|
||||
int keepalive = 1;
|
||||
char *progname;
|
||||
char *altlogin;
|
||||
|
||||
void doit __P((struct sockaddr_in *));
|
||||
int terminaltypeok __P((char *));
|
||||
void startslave __P((char *, int, char *));
|
||||
extern void usage P((void));
|
||||
|
||||
/*
|
||||
@ -171,14 +180,13 @@ char valid_opts[] = {
|
||||
'\0'
|
||||
};
|
||||
|
||||
int
|
||||
main(argc, argv)
|
||||
char *argv[];
|
||||
{
|
||||
struct sockaddr_in from;
|
||||
int on = 1, fromlen;
|
||||
register int ch;
|
||||
extern char *optarg;
|
||||
extern int optind;
|
||||
#if defined(IPPROTO_IP) && defined(IP_TOS)
|
||||
int tos = -1;
|
||||
#endif
|
||||
@ -190,8 +198,6 @@ main(argc, argv)
|
||||
nclearto = 0;
|
||||
#endif /* ENCRYPTION */
|
||||
|
||||
progname = *argv;
|
||||
|
||||
/*
|
||||
* This initialization causes linemode to default to a configuration
|
||||
* that works on all telnet clients, including the FreeBSD client.
|
||||
@ -216,7 +222,7 @@ main(argc, argv)
|
||||
highpty = getnpty();
|
||||
#endif /* CRAY */
|
||||
|
||||
while ((ch = getopt(argc, argv, valid_opts)) != EOF) {
|
||||
while ((ch = getopt(argc, argv, valid_opts)) != -1) {
|
||||
switch(ch) {
|
||||
|
||||
#ifdef AUTHENTICATION
|
||||
@ -241,8 +247,7 @@ main(argc, argv)
|
||||
*/
|
||||
auth_level = -1;
|
||||
} else {
|
||||
fprintf(stderr,
|
||||
"telnetd: unknown authorization level for -a\n");
|
||||
warnx("unknown authorization level for -a");
|
||||
}
|
||||
break;
|
||||
#endif /* AUTHENTICATION */
|
||||
@ -368,12 +373,11 @@ main(argc, argv)
|
||||
case 'S':
|
||||
#ifdef HAS_GETTOS
|
||||
if ((tos = parsetos(optarg, "tcp")) < 0)
|
||||
fprintf(stderr, "%s%s%s\n",
|
||||
"telnetd: Bad TOS argument '", optarg,
|
||||
warnx("%s%s%s",
|
||||
"bad TOS argument '", optarg,
|
||||
"'; will try to use default TOS");
|
||||
#else
|
||||
fprintf(stderr, "%s%s\n", "TOS option unavailable; ",
|
||||
"-S flag not supported\n");
|
||||
warnx("TOS option unavailable; -S flag not supported");
|
||||
#endif
|
||||
break;
|
||||
|
||||
@ -395,7 +399,7 @@ main(argc, argv)
|
||||
#endif /* AUTHENTICATION */
|
||||
|
||||
default:
|
||||
fprintf(stderr, "telnetd: %c: unknown option\n", ch);
|
||||
warnx("%c: unknown option", ch);
|
||||
/* FALLTHROUGH */
|
||||
case '?':
|
||||
usage();
|
||||
@ -420,7 +424,7 @@ main(argc, argv)
|
||||
} else {
|
||||
sin.sin_port = atoi(*argv);
|
||||
if ((int)sin.sin_port <= 0) {
|
||||
fprintf(stderr, "telnetd: %s: bad port #\n", *argv);
|
||||
warnx("%s: bad port #", *argv);
|
||||
usage();
|
||||
/* NOT REACHED */
|
||||
}
|
||||
@ -428,34 +432,24 @@ main(argc, argv)
|
||||
}
|
||||
} else {
|
||||
sp = getservbyname("telnet", "tcp");
|
||||
if (sp == 0) {
|
||||
fprintf(stderr, "telnetd: tcp/telnet: unknown service\n");
|
||||
exit(1);
|
||||
}
|
||||
if (sp == 0)
|
||||
errx(1, "tcp/telnet: unknown service");
|
||||
sin.sin_port = sp->s_port;
|
||||
}
|
||||
|
||||
s = socket(AF_INET, SOCK_STREAM, 0);
|
||||
if (s < 0) {
|
||||
perror("telnetd: socket");;
|
||||
exit(1);
|
||||
}
|
||||
if (s < 0)
|
||||
err(1, "socket");
|
||||
(void) setsockopt(s, SOL_SOCKET, SO_REUSEADDR,
|
||||
(char *)&on, sizeof(on));
|
||||
if (bind(s, (struct sockaddr *)&sin, sizeof sin) < 0) {
|
||||
perror("bind");
|
||||
exit(1);
|
||||
}
|
||||
if (listen(s, 1) < 0) {
|
||||
perror("listen");
|
||||
exit(1);
|
||||
}
|
||||
if (bind(s, (struct sockaddr *)&sin, sizeof sin) < 0)
|
||||
err(1, "bind");
|
||||
if (listen(s, 1) < 0)
|
||||
err(1, "listen");
|
||||
foo = sizeof sin;
|
||||
ns = accept(s, (struct sockaddr *)&sin, &foo);
|
||||
if (ns < 0) {
|
||||
perror("accept");
|
||||
exit(1);
|
||||
}
|
||||
if (ns < 0)
|
||||
err(1, "accept");
|
||||
(void) dup2(ns, 0);
|
||||
(void) close(ns);
|
||||
(void) close(s);
|
||||
@ -483,10 +477,8 @@ main(argc, argv)
|
||||
|
||||
memset((char *)&dv, 0, sizeof(dv));
|
||||
|
||||
if (getsysv(&sysv, sizeof(struct sysv)) != 0) {
|
||||
perror("getsysv");
|
||||
exit(1);
|
||||
}
|
||||
if (getsysv(&sysv, sizeof(struct sysv)) != 0)
|
||||
err(1, "getsysv");
|
||||
|
||||
/*
|
||||
* Get socket security label and set device values
|
||||
@ -497,8 +489,7 @@ main(argc, argv)
|
||||
(char *)&ss, &szss) < 0) ||
|
||||
(getsockopt(0, SOL_SOCKET, SO_SEC_MULTI,
|
||||
(char *)&sock_multi, &szi) < 0)) {
|
||||
perror("getsockopt");
|
||||
exit(1);
|
||||
err(1, "getsockopt");
|
||||
} else {
|
||||
dv.dv_actlvl = ss.ss_actlabel.lt_level;
|
||||
dv.dv_actcmp = ss.ss_actlabel.lt_compart;
|
||||
@ -528,8 +519,7 @@ main(argc, argv)
|
||||
openlog("telnetd", LOG_PID | LOG_ODELAY, LOG_DAEMON);
|
||||
fromlen = sizeof (from);
|
||||
if (getpeername(0, (struct sockaddr *)&from, &fromlen) < 0) {
|
||||
fprintf(stderr, "%s: ", progname);
|
||||
perror("getpeername");
|
||||
warn("getpeername");
|
||||
_exit(1);
|
||||
}
|
||||
if (keepalive &&
|
||||
@ -557,12 +547,13 @@ main(argc, argv)
|
||||
net = 0;
|
||||
doit(&from);
|
||||
/* NOTREACHED */
|
||||
return(0);
|
||||
} /* end of main */
|
||||
|
||||
void
|
||||
usage()
|
||||
{
|
||||
fprintf(stderr, "Usage: telnetd");
|
||||
fprintf(stderr, "usage: telnetd");
|
||||
#ifdef AUTHENTICATION
|
||||
fprintf(stderr, " [-a (debug|other|user|valid|off|none)]\n\t");
|
||||
#endif
|
||||
@ -821,11 +812,11 @@ char user_name[256];
|
||||
/*
|
||||
* Get a pty, scan input lines.
|
||||
*/
|
||||
void
|
||||
void
|
||||
doit(who)
|
||||
struct sockaddr_in *who;
|
||||
{
|
||||
char *host, *inet_ntoa();
|
||||
char *host = NULL;
|
||||
struct hostent *hp;
|
||||
int ptynum;
|
||||
|
||||
@ -1105,9 +1096,9 @@ telnet(f, p, host)
|
||||
* side. Set up signal handler now.
|
||||
*/
|
||||
if ((int)signal(SIGUSR1, termstat) < 0)
|
||||
perror("signal");
|
||||
warn("signal");
|
||||
else if (ioctl(p, TCSIGME, (char *)SIGUSR1) < 0)
|
||||
perror("ioctl:TCSIGME");
|
||||
warn("ioctl:TCSIGME");
|
||||
/*
|
||||
* Make processing loop check terminal characteristics early on.
|
||||
*/
|
||||
|
@ -32,7 +32,11 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static const char sccsid[] = "@(#)termstat.c 8.2 (Berkeley) 5/30/95";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
#endif /* not lint */
|
||||
|
||||
#include "telnetd.h"
|
||||
|
@ -32,7 +32,11 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static const char sccsid[] = "@(#)utility.c 8.4 (Berkeley) 5/30/95";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
#endif /* not lint */
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
@ -73,10 +77,10 @@ ttloop()
|
||||
}
|
||||
ncc = read(net, netibuf, sizeof netibuf);
|
||||
if (ncc < 0) {
|
||||
syslog(LOG_INFO, "ttloop: read: %m\n");
|
||||
syslog(LOG_INFO, "ttloop: read: %m");
|
||||
exit(1);
|
||||
} else if (ncc == 0) {
|
||||
syslog(LOG_INFO, "ttloop: peer died: %m\n");
|
||||
syslog(LOG_INFO, "ttloop: peer died: %m");
|
||||
exit(1);
|
||||
}
|
||||
DIAG(TD_REPORT, {sprintf(nfrontp, "td: ttloop read %d chars\r\n", ncc);
|
||||
@ -391,7 +395,6 @@ edithost(pat, host)
|
||||
register char *host;
|
||||
{
|
||||
register char *res = editedhost;
|
||||
char *strncpy();
|
||||
|
||||
if (!pat)
|
||||
pat = "";
|
||||
@ -537,8 +540,7 @@ printsub(direction, pointer, length)
|
||||
unsigned char *pointer; /* where suboption data sits */
|
||||
int length; /* length of suboption data */
|
||||
{
|
||||
register int i;
|
||||
char buf[512];
|
||||
register int i = 0;
|
||||
|
||||
if (!(diagnostic & TD_OPTIONS))
|
||||
return;
|
||||
@ -1012,8 +1014,11 @@ printsub(direction, pointer, length)
|
||||
"MUTUAL" : "ONE-WAY");
|
||||
nfrontp += strlen(nfrontp);
|
||||
|
||||
auth_printsub(&pointer[1], length - 1, buf, sizeof(buf));
|
||||
sprintf(nfrontp, "%s", buf);
|
||||
{
|
||||
char buf[512];
|
||||
auth_printsub(&pointer[1], length - 1, buf, sizeof(buf));
|
||||
sprintf(nfrontp, "%s", buf);
|
||||
}
|
||||
nfrontp += strlen(nfrontp);
|
||||
break;
|
||||
|
||||
@ -1107,8 +1112,11 @@ printsub(direction, pointer, length)
|
||||
sprintf(nfrontp, " %d (unknown)", pointer[2]);
|
||||
nfrontp += strlen(nfrontp);
|
||||
|
||||
encrypt_printsub(&pointer[1], length - 1, buf, sizeof(buf));
|
||||
sprintf(nfrontp, "%s", buf);
|
||||
{
|
||||
char buf[512];
|
||||
encrypt_printsub(&pointer[1], length - 1, buf, sizeof(buf));
|
||||
sprintf(nfrontp, "%s", buf);
|
||||
}
|
||||
nfrontp += strlen(nfrontp);
|
||||
break;
|
||||
|
||||
|
@ -32,7 +32,11 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static const char sccsid[] = "@(#)authenc.c 8.2 (Berkeley) 5/30/95";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
#endif /* not lint */
|
||||
|
||||
#if defined(AUTHENTICATION) || defined(ENCRYPTION)
|
||||
@ -75,7 +79,6 @@ telnet_spin()
|
||||
telnet_getenv(val)
|
||||
char *val;
|
||||
{
|
||||
extern char *getenv();
|
||||
return(getenv(val));
|
||||
}
|
||||
|
||||
|
@ -32,7 +32,11 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static const char sccsid[] = "@(#)global.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
|
@ -32,14 +32,18 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static const char sccsid[] = "@(#)slc.c 8.2 (Berkeley) 5/30/95";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
#endif /* not lint */
|
||||
|
||||
#include "telnetd.h"
|
||||
|
||||
#ifdef LINEMODE
|
||||
/*
|
||||
* local varibles
|
||||
* local variables
|
||||
*/
|
||||
static unsigned char *def_slcbuf = (unsigned char *)0;
|
||||
static int def_slclen = 0;
|
||||
|
@ -32,7 +32,11 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static const char sccsid[] = "@(#)state.c 8.5 (Berkeley) 5/30/95";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
#endif /* not lint */
|
||||
|
||||
#include "telnetd.h"
|
||||
@ -358,7 +362,7 @@ gotiac: switch (c) {
|
||||
continue;
|
||||
|
||||
default:
|
||||
syslog(LOG_ERR, "telnetd: panic state=%d\n", state);
|
||||
syslog(LOG_ERR, "panic state=%d", state);
|
||||
printf("telnetd: panic state=%d\n", state);
|
||||
exit(1);
|
||||
}
|
||||
|
@ -32,7 +32,11 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static const char sccsid[] = "@(#)sys_term.c 8.4+1 (Berkeley) 5/30/95";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
#endif /* not lint */
|
||||
|
||||
#include "telnetd.h"
|
||||
@ -184,6 +188,12 @@ int ttyfd = -1;
|
||||
# endif
|
||||
#endif /* USE_TERMIO */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <libutil.h>
|
||||
|
||||
int cleanopen __P((char *));
|
||||
void scrub_env __P((void));
|
||||
|
||||
/*
|
||||
* init_termbuf()
|
||||
* copy_termbuf(cp)
|
||||
@ -1000,7 +1010,7 @@ struct termspeeds {
|
||||
#endif
|
||||
{ -1, 0 }
|
||||
};
|
||||
#endif /* DECODE_BUAD */
|
||||
#endif /* DECODE_BAUD */
|
||||
|
||||
void
|
||||
tty_tspeed(val)
|
||||
@ -1014,9 +1024,9 @@ tty_tspeed(val)
|
||||
if (tp->speed == -1) /* back up to last valid value */
|
||||
--tp;
|
||||
cfsetospeed(&termbuf, tp->value);
|
||||
#else /* DECODE_BUAD */
|
||||
#else /* DECODE_BAUD */
|
||||
cfsetospeed(&termbuf, val);
|
||||
#endif /* DECODE_BUAD */
|
||||
#endif /* DECODE_BAUD */
|
||||
}
|
||||
|
||||
void
|
||||
@ -1075,8 +1085,7 @@ extern void utmp_sig_notify P((int));
|
||||
* getptyslave()
|
||||
*
|
||||
* Open the slave side of the pty, and do any initialization
|
||||
* that is necessary. The return value is a file descriptor
|
||||
* for the slave side.
|
||||
* that is necessary.
|
||||
*/
|
||||
void
|
||||
getptyslave()
|
||||
@ -1789,7 +1798,7 @@ start_login(host, autologin, name)
|
||||
}
|
||||
execv(altlogin, argv);
|
||||
|
||||
syslog(LOG_ERR, "%s: %m\n", altlogin);
|
||||
syslog(LOG_ERR, "%s: %m", altlogin);
|
||||
fatalperror(net, altlogin);
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
@ -2088,7 +2097,7 @@ cleantmp(wtp)
|
||||
|
||||
utp = getutid(wtp);
|
||||
if (utp == 0) {
|
||||
syslog(LOG_ERR, "Can't get /etc/utmp entry to clean TMPDIR");
|
||||
syslog(LOG_ERR, "can't get /etc/utmp entry to clean TMPDIR");
|
||||
return(-1);
|
||||
}
|
||||
/*
|
||||
@ -2176,12 +2185,12 @@ cleantmpdir(jid, tpath, user)
|
||||
{
|
||||
switch(fork()) {
|
||||
case -1:
|
||||
syslog(LOG_ERR, "TMPDIR cleanup(%s): fork() failed: %m\n",
|
||||
syslog(LOG_ERR, "TMPDIR cleanup(%s): fork() failed: %m",
|
||||
tpath);
|
||||
break;
|
||||
case 0:
|
||||
execl(CLEANTMPCMD, CLEANTMPCMD, user, tpath, 0);
|
||||
syslog(LOG_ERR, "TMPDIR cleanup(%s): execl(%s) failed: %m\n",
|
||||
syslog(LOG_ERR, "TMPDIR cleanup(%s): execl(%s) failed: %m",
|
||||
tpath, CLEANTMPCMD);
|
||||
exit(1);
|
||||
default:
|
||||
|
@ -48,13 +48,13 @@ protocol server
|
||||
.Op Fl X Ar authtype
|
||||
.Op Fl a Ar authmode
|
||||
.Op Fl edebug
|
||||
.Op Fl P Ar loginprog
|
||||
.Op Fl p Ar loginprog
|
||||
.Op Fl r Ns Ar lowpty-highpty
|
||||
.Op Fl u Ar len
|
||||
.Op Fl debug Op Ar port
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
command is a server which supports the
|
||||
.Tn DARPA
|
||||
standard
|
||||
@ -68,45 +68,45 @@ for requests to connect to the
|
||||
port as indicated by the
|
||||
.Pa /etc/services
|
||||
file (see
|
||||
.Xr services 5 ) .
|
||||
.Xr services 5 ).
|
||||
The
|
||||
.Fl debug
|
||||
option may be used to start up
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
manually, instead of through
|
||||
.Xr inetd 8 .
|
||||
If started up this way,
|
||||
.Ar port
|
||||
may be specified to run
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
on an alternate
|
||||
.Tn TCP
|
||||
port number.
|
||||
.Pp
|
||||
The
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
command accepts the following options:
|
||||
.Bl -tag -width "-a authmode"
|
||||
.Bl -tag -width indent
|
||||
.It Fl a Ar authmode
|
||||
This option may be used for specifying what mode should
|
||||
be used for authentication.
|
||||
Note that this option is only useful if
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
has been compiled with support for the
|
||||
.Dv AUTHENTICATION
|
||||
option.
|
||||
There are several valid values for
|
||||
.Ar authmode:
|
||||
.Ar authmode :
|
||||
.Bl -tag -width debug
|
||||
.It debug
|
||||
Turns on authentication debugging code.
|
||||
.It user
|
||||
.It Cm debug
|
||||
Turn on authentication debugging code.
|
||||
.It Cm user
|
||||
Only allow connections when the remote user
|
||||
can provide valid authentication information
|
||||
to identify the remote user,
|
||||
and is allowed access to the specified account
|
||||
without providing a password.
|
||||
.It valid
|
||||
.It Cm valid
|
||||
Only allow connections when the remote user
|
||||
can provide valid authentication information
|
||||
to identify the remote user.
|
||||
@ -115,14 +115,14 @@ The
|
||||
command will provide any additional user verification
|
||||
needed if the remote user is not allowed automatic
|
||||
access to the specified account.
|
||||
.It other
|
||||
.It Cm other
|
||||
Only allow connections that supply some authentication information.
|
||||
This option is currently not supported
|
||||
by any of the existing authentication mechanisms,
|
||||
and is thus the same as specifying
|
||||
.Fl a
|
||||
.Cm valid .
|
||||
.It none
|
||||
.It Cm none
|
||||
This is the default state.
|
||||
Authentication information is not required.
|
||||
If no or insufficient authentication information
|
||||
@ -130,15 +130,15 @@ is provided, then the
|
||||
.Xr login 1
|
||||
program will provide the necessary user
|
||||
verification.
|
||||
.It off
|
||||
This disables the authentication code.
|
||||
.It Cm off
|
||||
Disable the authentication code.
|
||||
All user verification will happen through the
|
||||
.Xr login 1
|
||||
program.
|
||||
.El
|
||||
.It Fl B
|
||||
Specifies bftp server mode. In this mode,
|
||||
.Nm telnetd
|
||||
Specify bftp server mode. In this mode,
|
||||
.Nm
|
||||
causes login to start a
|
||||
.Xr bftp 1
|
||||
session rather than the user's
|
||||
@ -150,51 +150,51 @@ port.
|
||||
.It Fl D Ar debugmode
|
||||
This option may be used for debugging purposes.
|
||||
This allows
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
to print out debugging information
|
||||
to the connection, allowing the user to see what
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
is doing.
|
||||
There are several possible values for
|
||||
.Ar debugmode:
|
||||
.Ar debugmode :
|
||||
.Bl -tag -width exercise
|
||||
.It Cm options
|
||||
Prints information about the negotiation of
|
||||
Print information about the negotiation of
|
||||
.Tn TELNET
|
||||
options.
|
||||
.It Cm report
|
||||
Prints the
|
||||
Print the
|
||||
.Cm options
|
||||
information, plus some additional information
|
||||
about what processing is going on.
|
||||
.It Cm netdata
|
||||
Displays the data stream received by
|
||||
.Nm telnetd.
|
||||
Display the data stream received by
|
||||
.Nm Ns .
|
||||
.It Cm ptydata
|
||||
Displays data written to the pty.
|
||||
Display data written to the pty.
|
||||
.It Cm exercise
|
||||
Has not been implemented yet.
|
||||
.El
|
||||
.It Fl debug
|
||||
Enables debugging on each socket created by
|
||||
.Nm telnetd
|
||||
Enable debugging on each socket created by
|
||||
.Nm
|
||||
(see
|
||||
.Dv SO_DEBUG
|
||||
in
|
||||
.Xr socket 2 ) .
|
||||
.It Fl edebug
|
||||
If
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
has been compiled with support for data encryption, then the
|
||||
.Fl edebug
|
||||
option may be used to enable encryption debugging code.
|
||||
.It Fl P Ar loginprog
|
||||
Specifies an alternate
|
||||
.It Fl p Ar loginprog
|
||||
Specify an alternate
|
||||
.Xr login 1
|
||||
command to run to complete the login. The alternate command must
|
||||
understand the same command arguments as the standard login.
|
||||
.It Fl h
|
||||
Disables the printing of host-specific information before
|
||||
Disable the printing of host-specific information before
|
||||
login has been completed.
|
||||
.It Fl I Ar initid
|
||||
This option is only applicable to
|
||||
@ -210,7 +210,7 @@ is
|
||||
.Dv fe.
|
||||
.It Fl k
|
||||
This option is only useful if
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
has been compiled with both linemode and kludge linemode
|
||||
support. If the
|
||||
.Fl k
|
||||
@ -218,12 +218,12 @@ option is specified, then if the remote client does not
|
||||
support the
|
||||
.Dv LINEMODE
|
||||
option, then
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
will operate in character at a time mode.
|
||||
It will still support kludge linemode, but will only
|
||||
go into kludge linemode if the remote client requests
|
||||
it.
|
||||
(This is done by by the client sending
|
||||
(This is done by the client sending
|
||||
.Dv DONT SUPPRESS-GO-AHEAD
|
||||
and
|
||||
.Dv DONT ECHO . )
|
||||
@ -237,7 +237,7 @@ in response to a
|
||||
.Dv DO TIMING-MARK)
|
||||
for kludge linemode support.
|
||||
.It Fl l
|
||||
Specifies line mode. Tries to force clients to use line-
|
||||
Specify line mode. Try to force clients to use line-
|
||||
at-a-time mode.
|
||||
If the
|
||||
.Dv LINEMODE
|
||||
@ -247,7 +247,7 @@ into kludge linemode.
|
||||
Disable
|
||||
.Dv TCP
|
||||
keep-alives. Normally
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
enables the
|
||||
.Tn TCP
|
||||
keep-alive mechanism to probe connections that
|
||||
@ -257,7 +257,7 @@ from machines that have crashed or can no longer
|
||||
be reached may be cleaned up.
|
||||
.It Fl r Ar lowpty-highpty
|
||||
This option is only enabled when
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
is compiled for
|
||||
.Dv UNICOS.
|
||||
It specifies an inclusive range of pseudo-terminal devices to
|
||||
@ -273,14 +273,14 @@ may be omitted to allow changing
|
||||
either end of the search range. If
|
||||
.Ar lowpty
|
||||
is omitted, the - character is still required so that
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
can differentiate
|
||||
.Ar highpty
|
||||
from
|
||||
.Ar lowpty .
|
||||
.It Fl s
|
||||
This option is only enabled if
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
is compiled with support for
|
||||
.Tn SecurID
|
||||
cards.
|
||||
@ -317,7 +317,7 @@ file.
|
||||
.ne 1i
|
||||
.It Fl U
|
||||
This option causes
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
to refuse connections from addresses that
|
||||
cannot be mapped back into a symbolic name
|
||||
via the
|
||||
@ -325,14 +325,14 @@ via the
|
||||
routine.
|
||||
.It Fl X Ar authtype
|
||||
This option is only valid if
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
has been built with support for the authentication option.
|
||||
It disables the use of
|
||||
.Ar authtype
|
||||
authentication, and
|
||||
can be used to temporarily disable
|
||||
a specific authentication type without having to recompile
|
||||
.Nm telnetd .
|
||||
.Nm Ns .
|
||||
.El
|
||||
.Pp
|
||||
.Nm Telnetd
|
||||
@ -354,7 +354,7 @@ between the remote client and the login process.
|
||||
When a
|
||||
.Tn TELNET
|
||||
session is started up,
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
sends
|
||||
.Tn TELNET
|
||||
options to the client side indicating
|
||||
@ -403,25 +403,25 @@ current state of terminal echoing.
|
||||
When terminal echo is not desired, a
|
||||
.Dv WILL ECHO
|
||||
is sent to indicate that
|
||||
.Tn telnetd
|
||||
.Nm
|
||||
will take care of echoing any data that needs to be
|
||||
echoed to the terminal, and then nothing is echoed.
|
||||
When terminal echo is desired, a
|
||||
.Dv WONT ECHO
|
||||
is sent to indicate that
|
||||
.Tn telnetd
|
||||
.Nm
|
||||
will not be doing any terminal echoing, so the
|
||||
client should do any terminal echoing that is needed.
|
||||
.It "WILL BINARY"
|
||||
Indicates that the client is willing to send a
|
||||
Indicate that the client is willing to send a
|
||||
8 bits of data, rather than the normal 7 bits
|
||||
of the Network Virtual Terminal.
|
||||
.It "WILL SGA"
|
||||
Indicates that it will not be sending
|
||||
Indicate that it will not be sending
|
||||
.Dv IAC GA,
|
||||
go ahead, commands.
|
||||
.It "WILL STATUS"
|
||||
Indicates a willingness to send the client, upon
|
||||
Indicate a willingness to send the client, upon
|
||||
request, of the current status of all
|
||||
.Tn TELNET
|
||||
options.
|
||||
@ -442,7 +442,7 @@ is sent in response, and the
|
||||
session is shut down.
|
||||
.It "WILL ENCRYPT"
|
||||
Only sent if
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
is compiled with support for data encryption, and
|
||||
indicates a willingness to decrypt
|
||||
the data stream.
|
||||
@ -455,7 +455,7 @@ options:
|
||||
.Bl -tag -width "DO AUTHENTICATION"
|
||||
.It "DO BINARY"
|
||||
Sent to indicate that
|
||||
.Tn telnetd
|
||||
.Nm
|
||||
is willing to receive an 8 bit data stream.
|
||||
.It "DO LFLOW"
|
||||
Requests that the client handle flow control
|
||||
@ -471,38 +471,38 @@ is received, a
|
||||
.Dv DONT ECHO
|
||||
will be sent in response.
|
||||
.It "DO TERMINAL-TYPE"
|
||||
Indicates a desire to be able to request the
|
||||
Indicate a desire to be able to request the
|
||||
name of the type of terminal that is attached
|
||||
to the client side of the connection.
|
||||
.It "DO SGA"
|
||||
Indicates that it does not need to receive
|
||||
Indicate that it does not need to receive
|
||||
.Dv IAC GA,
|
||||
the go ahead command.
|
||||
.It "DO NAWS"
|
||||
Requests that the client inform the server when
|
||||
the window (display) size changes.
|
||||
.It "DO TERMINAL-SPEED"
|
||||
Indicates a desire to be able to request information
|
||||
Indicate a desire to be able to request information
|
||||
about the speed of the serial line to which
|
||||
the client is attached.
|
||||
.It "DO XDISPLOC"
|
||||
Indicates a desire to be able to request the name
|
||||
of the X windows display that is associated with
|
||||
Indicate a desire to be able to request the name
|
||||
of the X Window System display that is associated with
|
||||
the telnet client.
|
||||
.It "DO NEW-ENVIRON"
|
||||
Indicates a desire to be able to request environment
|
||||
Indicate a desire to be able to request environment
|
||||
variable information, as described in RFC 1572.
|
||||
.It "DO ENVIRON"
|
||||
Indicates a desire to be able to request environment
|
||||
Indicate a desire to be able to request environment
|
||||
variable information, as described in RFC 1408.
|
||||
.It "DO LINEMODE"
|
||||
Only sent if
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
is compiled with support for linemode, and
|
||||
requests that the client do line by line processing.
|
||||
.It "DO TIMING-MARK"
|
||||
Only sent if
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
is compiled with support for both linemode and
|
||||
kludge linemode, and the client responded with
|
||||
.Dv WONT LINEMODE.
|
||||
@ -515,28 +515,27 @@ Note that the
|
||||
option can be used to disable this.
|
||||
.It "DO AUTHENTICATION"
|
||||
Only sent if
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
is compiled with support for authentication, and
|
||||
indicates a willingness to receive authentication
|
||||
information for automatic login.
|
||||
.It "DO ENCRYPT"
|
||||
Only sent if
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
is compiled with support for data encryption, and
|
||||
indicates a willingness to decrypt
|
||||
the data stream.
|
||||
.Sh ENVIRONMENT
|
||||
.Sh FILES
|
||||
.Pa /etc/services
|
||||
.br
|
||||
.Pa /etc/inittab
|
||||
.Bl -tag -width /usr/ucb/bftp -compact
|
||||
.It Pa /etc/services
|
||||
.It Pa /etc/inittab
|
||||
(UNICOS systems only)
|
||||
.br
|
||||
.Pa /etc/iptos
|
||||
.It Pa /etc/iptos
|
||||
(if supported)
|
||||
.br
|
||||
.Pa /usr/ucb/bftp
|
||||
.It Pa /usr/ucb/bftp
|
||||
(if supported)
|
||||
.El
|
||||
.Sh "SEE ALSO"
|
||||
.Xr bftp 1 ,
|
||||
.Xr login 1 ,
|
||||
@ -594,7 +593,7 @@ commands are only partially implemented.
|
||||
.Pp
|
||||
Because of bugs in the original 4.2 BSD
|
||||
.Xr telnet 1 ,
|
||||
.Nm telnetd
|
||||
.Nm
|
||||
performs some dubious protocol exchanges to try to discover if the remote
|
||||
client is, in fact, a 4.2 BSD
|
||||
.Xr telnet 1 .
|
||||
|
@ -38,7 +38,11 @@ static const char copyright[] =
|
||||
#endif /* not lint */
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static const char sccsid[] = "@(#)telnetd.c 8.4 (Berkeley) 5/30/95";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
#endif /* not lint */
|
||||
|
||||
#include "telnetd.h"
|
||||
@ -53,6 +57,9 @@ static const char sccsid[] = "@(#)telnetd.c 8.4 (Berkeley) 5/30/95";
|
||||
# undef _SC_CRAY_SECURE_SYS
|
||||
#endif
|
||||
|
||||
#include <err.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#if defined(_SC_CRAY_SECURE_SYS)
|
||||
#include <sys/sysv.h>
|
||||
#include <sys/secdev.h>
|
||||
@ -132,9 +139,11 @@ int lowpty = 0, highpty; /* low, high pty numbers */
|
||||
|
||||
int debug = 0;
|
||||
int keepalive = 1;
|
||||
char *progname;
|
||||
char *altlogin;
|
||||
|
||||
void doit __P((struct sockaddr_in *));
|
||||
int terminaltypeok __P((char *));
|
||||
void startslave __P((char *, int, char *));
|
||||
extern void usage P((void));
|
||||
|
||||
/*
|
||||
@ -171,14 +180,13 @@ char valid_opts[] = {
|
||||
'\0'
|
||||
};
|
||||
|
||||
int
|
||||
main(argc, argv)
|
||||
char *argv[];
|
||||
{
|
||||
struct sockaddr_in from;
|
||||
int on = 1, fromlen;
|
||||
register int ch;
|
||||
extern char *optarg;
|
||||
extern int optind;
|
||||
#if defined(IPPROTO_IP) && defined(IP_TOS)
|
||||
int tos = -1;
|
||||
#endif
|
||||
@ -190,8 +198,6 @@ main(argc, argv)
|
||||
nclearto = 0;
|
||||
#endif /* ENCRYPTION */
|
||||
|
||||
progname = *argv;
|
||||
|
||||
/*
|
||||
* This initialization causes linemode to default to a configuration
|
||||
* that works on all telnet clients, including the FreeBSD client.
|
||||
@ -216,7 +222,7 @@ main(argc, argv)
|
||||
highpty = getnpty();
|
||||
#endif /* CRAY */
|
||||
|
||||
while ((ch = getopt(argc, argv, valid_opts)) != EOF) {
|
||||
while ((ch = getopt(argc, argv, valid_opts)) != -1) {
|
||||
switch(ch) {
|
||||
|
||||
#ifdef AUTHENTICATION
|
||||
@ -241,8 +247,7 @@ main(argc, argv)
|
||||
*/
|
||||
auth_level = -1;
|
||||
} else {
|
||||
fprintf(stderr,
|
||||
"telnetd: unknown authorization level for -a\n");
|
||||
warnx("unknown authorization level for -a");
|
||||
}
|
||||
break;
|
||||
#endif /* AUTHENTICATION */
|
||||
@ -368,12 +373,11 @@ main(argc, argv)
|
||||
case 'S':
|
||||
#ifdef HAS_GETTOS
|
||||
if ((tos = parsetos(optarg, "tcp")) < 0)
|
||||
fprintf(stderr, "%s%s%s\n",
|
||||
"telnetd: Bad TOS argument '", optarg,
|
||||
warnx("%s%s%s",
|
||||
"bad TOS argument '", optarg,
|
||||
"'; will try to use default TOS");
|
||||
#else
|
||||
fprintf(stderr, "%s%s\n", "TOS option unavailable; ",
|
||||
"-S flag not supported\n");
|
||||
warnx("TOS option unavailable; -S flag not supported");
|
||||
#endif
|
||||
break;
|
||||
|
||||
@ -395,7 +399,7 @@ main(argc, argv)
|
||||
#endif /* AUTHENTICATION */
|
||||
|
||||
default:
|
||||
fprintf(stderr, "telnetd: %c: unknown option\n", ch);
|
||||
warnx("%c: unknown option", ch);
|
||||
/* FALLTHROUGH */
|
||||
case '?':
|
||||
usage();
|
||||
@ -420,7 +424,7 @@ main(argc, argv)
|
||||
} else {
|
||||
sin.sin_port = atoi(*argv);
|
||||
if ((int)sin.sin_port <= 0) {
|
||||
fprintf(stderr, "telnetd: %s: bad port #\n", *argv);
|
||||
warnx("%s: bad port #", *argv);
|
||||
usage();
|
||||
/* NOT REACHED */
|
||||
}
|
||||
@ -428,34 +432,24 @@ main(argc, argv)
|
||||
}
|
||||
} else {
|
||||
sp = getservbyname("telnet", "tcp");
|
||||
if (sp == 0) {
|
||||
fprintf(stderr, "telnetd: tcp/telnet: unknown service\n");
|
||||
exit(1);
|
||||
}
|
||||
if (sp == 0)
|
||||
errx(1, "tcp/telnet: unknown service");
|
||||
sin.sin_port = sp->s_port;
|
||||
}
|
||||
|
||||
s = socket(AF_INET, SOCK_STREAM, 0);
|
||||
if (s < 0) {
|
||||
perror("telnetd: socket");;
|
||||
exit(1);
|
||||
}
|
||||
if (s < 0)
|
||||
err(1, "socket");
|
||||
(void) setsockopt(s, SOL_SOCKET, SO_REUSEADDR,
|
||||
(char *)&on, sizeof(on));
|
||||
if (bind(s, (struct sockaddr *)&sin, sizeof sin) < 0) {
|
||||
perror("bind");
|
||||
exit(1);
|
||||
}
|
||||
if (listen(s, 1) < 0) {
|
||||
perror("listen");
|
||||
exit(1);
|
||||
}
|
||||
if (bind(s, (struct sockaddr *)&sin, sizeof sin) < 0)
|
||||
err(1, "bind");
|
||||
if (listen(s, 1) < 0)
|
||||
err(1, "listen");
|
||||
foo = sizeof sin;
|
||||
ns = accept(s, (struct sockaddr *)&sin, &foo);
|
||||
if (ns < 0) {
|
||||
perror("accept");
|
||||
exit(1);
|
||||
}
|
||||
if (ns < 0)
|
||||
err(1, "accept");
|
||||
(void) dup2(ns, 0);
|
||||
(void) close(ns);
|
||||
(void) close(s);
|
||||
@ -483,10 +477,8 @@ main(argc, argv)
|
||||
|
||||
memset((char *)&dv, 0, sizeof(dv));
|
||||
|
||||
if (getsysv(&sysv, sizeof(struct sysv)) != 0) {
|
||||
perror("getsysv");
|
||||
exit(1);
|
||||
}
|
||||
if (getsysv(&sysv, sizeof(struct sysv)) != 0)
|
||||
err(1, "getsysv");
|
||||
|
||||
/*
|
||||
* Get socket security label and set device values
|
||||
@ -497,8 +489,7 @@ main(argc, argv)
|
||||
(char *)&ss, &szss) < 0) ||
|
||||
(getsockopt(0, SOL_SOCKET, SO_SEC_MULTI,
|
||||
(char *)&sock_multi, &szi) < 0)) {
|
||||
perror("getsockopt");
|
||||
exit(1);
|
||||
err(1, "getsockopt");
|
||||
} else {
|
||||
dv.dv_actlvl = ss.ss_actlabel.lt_level;
|
||||
dv.dv_actcmp = ss.ss_actlabel.lt_compart;
|
||||
@ -528,8 +519,7 @@ main(argc, argv)
|
||||
openlog("telnetd", LOG_PID | LOG_ODELAY, LOG_DAEMON);
|
||||
fromlen = sizeof (from);
|
||||
if (getpeername(0, (struct sockaddr *)&from, &fromlen) < 0) {
|
||||
fprintf(stderr, "%s: ", progname);
|
||||
perror("getpeername");
|
||||
warn("getpeername");
|
||||
_exit(1);
|
||||
}
|
||||
if (keepalive &&
|
||||
@ -557,12 +547,13 @@ main(argc, argv)
|
||||
net = 0;
|
||||
doit(&from);
|
||||
/* NOTREACHED */
|
||||
return(0);
|
||||
} /* end of main */
|
||||
|
||||
void
|
||||
usage()
|
||||
{
|
||||
fprintf(stderr, "Usage: telnetd");
|
||||
fprintf(stderr, "usage: telnetd");
|
||||
#ifdef AUTHENTICATION
|
||||
fprintf(stderr, " [-a (debug|other|user|valid|off|none)]\n\t");
|
||||
#endif
|
||||
@ -821,11 +812,11 @@ char user_name[256];
|
||||
/*
|
||||
* Get a pty, scan input lines.
|
||||
*/
|
||||
void
|
||||
void
|
||||
doit(who)
|
||||
struct sockaddr_in *who;
|
||||
{
|
||||
char *host, *inet_ntoa();
|
||||
char *host = NULL;
|
||||
struct hostent *hp;
|
||||
int ptynum;
|
||||
|
||||
@ -1105,9 +1096,9 @@ telnet(f, p, host)
|
||||
* side. Set up signal handler now.
|
||||
*/
|
||||
if ((int)signal(SIGUSR1, termstat) < 0)
|
||||
perror("signal");
|
||||
warn("signal");
|
||||
else if (ioctl(p, TCSIGME, (char *)SIGUSR1) < 0)
|
||||
perror("ioctl:TCSIGME");
|
||||
warn("ioctl:TCSIGME");
|
||||
/*
|
||||
* Make processing loop check terminal characteristics early on.
|
||||
*/
|
||||
|
@ -32,7 +32,11 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static const char sccsid[] = "@(#)termstat.c 8.2 (Berkeley) 5/30/95";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
#endif /* not lint */
|
||||
|
||||
#include "telnetd.h"
|
||||
|
@ -32,7 +32,11 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static const char sccsid[] = "@(#)utility.c 8.4 (Berkeley) 5/30/95";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
#endif /* not lint */
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
@ -73,10 +77,10 @@ ttloop()
|
||||
}
|
||||
ncc = read(net, netibuf, sizeof netibuf);
|
||||
if (ncc < 0) {
|
||||
syslog(LOG_INFO, "ttloop: read: %m\n");
|
||||
syslog(LOG_INFO, "ttloop: read: %m");
|
||||
exit(1);
|
||||
} else if (ncc == 0) {
|
||||
syslog(LOG_INFO, "ttloop: peer died: %m\n");
|
||||
syslog(LOG_INFO, "ttloop: peer died: %m");
|
||||
exit(1);
|
||||
}
|
||||
DIAG(TD_REPORT, {sprintf(nfrontp, "td: ttloop read %d chars\r\n", ncc);
|
||||
@ -391,7 +395,6 @@ edithost(pat, host)
|
||||
register char *host;
|
||||
{
|
||||
register char *res = editedhost;
|
||||
char *strncpy();
|
||||
|
||||
if (!pat)
|
||||
pat = "";
|
||||
@ -537,8 +540,7 @@ printsub(direction, pointer, length)
|
||||
unsigned char *pointer; /* where suboption data sits */
|
||||
int length; /* length of suboption data */
|
||||
{
|
||||
register int i;
|
||||
char buf[512];
|
||||
register int i = 0;
|
||||
|
||||
if (!(diagnostic & TD_OPTIONS))
|
||||
return;
|
||||
@ -1012,8 +1014,11 @@ printsub(direction, pointer, length)
|
||||
"MUTUAL" : "ONE-WAY");
|
||||
nfrontp += strlen(nfrontp);
|
||||
|
||||
auth_printsub(&pointer[1], length - 1, buf, sizeof(buf));
|
||||
sprintf(nfrontp, "%s", buf);
|
||||
{
|
||||
char buf[512];
|
||||
auth_printsub(&pointer[1], length - 1, buf, sizeof(buf));
|
||||
sprintf(nfrontp, "%s", buf);
|
||||
}
|
||||
nfrontp += strlen(nfrontp);
|
||||
break;
|
||||
|
||||
@ -1107,8 +1112,11 @@ printsub(direction, pointer, length)
|
||||
sprintf(nfrontp, " %d (unknown)", pointer[2]);
|
||||
nfrontp += strlen(nfrontp);
|
||||
|
||||
encrypt_printsub(&pointer[1], length - 1, buf, sizeof(buf));
|
||||
sprintf(nfrontp, "%s", buf);
|
||||
{
|
||||
char buf[512];
|
||||
encrypt_printsub(&pointer[1], length - 1, buf, sizeof(buf));
|
||||
sprintf(nfrontp, "%s", buf);
|
||||
}
|
||||
nfrontp += strlen(nfrontp);
|
||||
break;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user