summaryrefslogtreecommitdiffstats
path: root/usr.bin/telnet
diff options
context:
space:
mode:
authordillon <dillon@FreeBSD.org>2001-05-23 22:47:16 +0000
committerdillon <dillon@FreeBSD.org>2001-05-23 22:47:16 +0000
commita2bd71dbaf9c5662b4dd45011ebfec24b18c5740 (patch)
treea2a3188500ede8bdee474b70aa5560df7cda9769 /usr.bin/telnet
parent7959aca6f7927fb68c5325dea9b886220f5c7842 (diff)
downloadFreeBSD-src-a2bd71dbaf9c5662b4dd45011ebfec24b18c5740.zip
FreeBSD-src-a2bd71dbaf9c5662b4dd45011ebfec24b18c5740.tar.gz
A feature to allow one to telnet to a unix domain socket.
Obtained from: Lyndon Nerenberg <lyndon@orthanc.ab.ca>
Diffstat (limited to 'usr.bin/telnet')
-rw-r--r--usr.bin/telnet/commands.c30
-rw-r--r--usr.bin/telnet/main.c5
-rw-r--r--usr.bin/telnet/telnet.113
3 files changed, 44 insertions, 4 deletions
diff --git a/usr.bin/telnet/commands.c b/usr.bin/telnet/commands.c
index 5079dc1..d8160cc 100644
--- a/usr.bin/telnet/commands.c
+++ b/usr.bin/telnet/commands.c
@@ -39,6 +39,7 @@ static char sccsid[] = "@(#)commands.c 8.2 (Berkeley) 12/15/93";
#if defined(unix)
#include <sys/param.h>
+#include <sys/un.h>
#if defined(CRAY) || defined(sysV88)
#include <sys/types.h>
#endif
@@ -2109,6 +2110,9 @@ sockaddr_ntop(sa)
case AF_INET:
addr = &((struct sockaddr_in *)sa)->sin_addr;
break;
+ case AF_UNIX:
+ addr = &((struct sockaddr_un *)sa)->sun_path;
+ break;
#ifdef INET6
case AF_INET6:
addr = &((struct sockaddr_in6 *)sa)->sin6_addr;
@@ -2267,7 +2271,30 @@ tn(argc, argv)
}
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 (
#ifdef INET6
family == AF_INET6 ||
@@ -2450,6 +2477,7 @@ tn(argc, argv)
if (src_res0 != NULL)
freeaddrinfo(src_res0);
cmdrc(hostp, hostname);
+ af_unix:
if (autologin && user == NULL) {
struct passwd *pw;
diff --git a/usr.bin/telnet/main.c b/usr.bin/telnet/main.c
index 657f560..4b4a13a 100644
--- a/usr.bin/telnet/main.c
+++ b/usr.bin/telnet/main.c
@@ -157,11 +157,14 @@ main(argc, argv)
#define IPSECOPT
#endif
while ((ch = getopt(argc, argv,
- "468EKLNS:X:acde:fFk:l:n:rs:t:x" IPSECOPT)) != -1)
+ "468EKLNS:X:acde:fFk:l:n:rs:t:ux" IPSECOPT)) != -1)
#undef IPSECOPT
{
switch(ch) {
+ case 'u':
+ family = AF_UNIX;
+ break;
case '4':
family = AF_INET;
break;
diff --git a/usr.bin/telnet/telnet.1 b/usr.bin/telnet/telnet.1
index 56bf056..4c857d9 100644
--- a/usr.bin/telnet/telnet.1
+++ b/usr.bin/telnet/telnet.1
@@ -42,7 +42,7 @@
protocol
.Sh SYNOPSIS
.Nm
-.Op Fl 468EFKLNacdfrx
+.Op Fl u468EFKLNacdfrx
.Op Fl S Ar tos
.Op Fl X Ar authtype
.Op Fl e Ar escapechar
@@ -75,6 +75,11 @@ command with those arguments.
.Pp
Options:
.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
@@ -205,7 +210,11 @@ option is not available outside of the United States and
Canada.
.It Ar host
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
Indicates a port number (address of an application). If a number is
not specified, the default
OpenPOWER on IntegriCloud