A feature to allow one to telnet to a unix domain socket. (MFC from

non-crypto version)

Also update the crypto telnet's man page to reflect other options
ported from the non-crypto version.

Obtained from:   Lyndon Nerenberg <lyndon@orthanc.ab.ca>


git-svn-id: http://svn0.us-east.freebsd.org/base/head/contrib/telnet@77095 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
This commit is contained in:
dillon 2001-05-23 22:54:07 +00:00
parent 9c526f75a3
commit c5ebb16d3c
3 changed files with 51 additions and 3 deletions

View File

@ -39,6 +39,7 @@ static const char sccsid[] = "@(#)commands.c 8.4 (Berkeley) 5/30/95";
#if defined(unix) #if defined(unix)
#include <sys/param.h> #include <sys/param.h>
#include <sys/un.h>
#if defined(CRAY) || defined(sysV88) #if defined(CRAY) || defined(sysV88)
#include <sys/types.h> #include <sys/types.h>
#endif #endif
@ -2285,6 +2286,9 @@ sockaddr_ntop(sa)
case AF_INET: case AF_INET:
addr = &((struct sockaddr_in *)sa)->sin_addr; addr = &((struct sockaddr_in *)sa)->sin_addr;
break; break;
case AF_UNIX:
addr = &((struct sockaddr_un *)sa)->sun_path;
break;
#ifdef INET6 #ifdef INET6
case AF_INET6: case AF_INET6:
addr = &((struct sockaddr_in6 *)sa)->sin6_addr; addr = &((struct sockaddr_in6 *)sa)->sin6_addr;
@ -2443,7 +2447,30 @@ tn(argc, argv)
} }
src_res0 = src_res; src_res0 = src_res;
} }
if (hostp[0] == '@' || hostp[0] == '!') { if (hostp[0] == '/') {
struct sockaddr_un su;
if (strlen(hostp) >= sizeof(su.sun_path)) {
fprintf(stderr, "hostname too long for unix domain socket: %s",
hostp);
goto fail;
}
memset(&su, 0, sizeof su);
su.sun_family = AF_UNIX;
strncpy(su.sun_path, hostp, sizeof su.sun_path);
printf("Trying %s...\n", &su.sun_path);
net = socket(PF_UNIX, SOCK_STREAM, 0);
if ( net < 0) {
perror("socket");
goto fail;
}
if (connect(net, (struct sockaddr *)&su, sizeof su) == -1) {
perror(su.sun_path);
(void) NetClose(net);
goto fail;
}
goto af_unix;
} else if (hostp[0] == '@' || hostp[0] == '!') {
if ( if (
#ifdef INET6 #ifdef INET6
family == AF_INET6 || family == AF_INET6 ||
@ -2626,6 +2653,7 @@ tn(argc, argv)
if (src_res0 != NULL) if (src_res0 != NULL)
freeaddrinfo(src_res0); freeaddrinfo(src_res0);
cmdrc(hostp, hostname); cmdrc(hostp, hostname);
af_unix:
if (autologin && user == NULL) { if (autologin && user == NULL) {
struct passwd *pw; struct passwd *pw;

View File

@ -184,6 +184,9 @@ main(argc, argv)
#undef IPSECOPT #undef IPSECOPT
{ {
switch(ch) { switch(ch) {
case 'u':
family = AF_UNIX;
break;
case '4': case '4':
family = AF_INET; family = AF_INET;
break; break;

View File

@ -42,7 +42,7 @@
protocol protocol
.Sh SYNOPSIS .Sh SYNOPSIS
.Nm .Nm
.Op Fl 8EFKLNcdfry .Op Fl u468EFKLNcdfry
.Op Fl S Ar tos .Op Fl S Ar tos
.Op Fl X Ar authtype .Op Fl X Ar authtype
.Op Fl e Ar escapechar .Op Fl e Ar escapechar
@ -75,6 +75,19 @@ command with those arguments.
.Pp .Pp
Options: Options:
.Bl -tag -width indent .Bl -tag -width indent
.It Fl u
Forces
.Nm
to use
AF_UNIX addresses only (e.g. unix domain sockets, accessed with a file path)
.It Fl 4
Forces
.Nm
to use IPv4 addresses only.
.It Fl 6
Forces
.Nm
to use IPv6 addresses only.
.It Fl 8 .It Fl 8
Specifies an 8-bit data path. This causes an attempt to Specifies an 8-bit data path. This causes an attempt to
negotiate the negotiate the
@ -191,7 +204,11 @@ This is now the default, so this option is ignored.
Suppresses encryption of the data stream. Suppresses encryption of the data stream.
.It Ar host .It Ar host
Indicates the official name, an alias, or the Internet address Indicates the official name, an alias, or the Internet address
of a remote host. of a remote host. If
.Ar host
starts with a /,
.Nm
establishes a connection to the corresponding named socket.
.It Ar port .It Ar port
Indicates a port number (address of an application). If a number is Indicates a port number (address of an application). If a number is
not specified, the default not specified, the default