summaryrefslogtreecommitdiff
path: root/usr.bin
diff options
context:
space:
mode:
authorEugene Grosbein <eugen@FreeBSD.org>2017-10-02 16:33:04 +0000
committerEugene Grosbein <eugen@FreeBSD.org>2017-10-02 16:33:04 +0000
commit8942852cbc1a25b29d470f1b3fb93bb3043bef99 (patch)
treee01a9cb606bfc30628e8a796a005bc5d6eeb4857 /usr.bin
parentd8ffc6fb25d5fbad5c98904f350b20ecdb331764 (diff)
downloadsrc-test2-8942852cbc1a25b29d470f1b3fb93bb3043bef99.tar.gz
src-test2-8942852cbc1a25b29d470f1b3fb93bb3043bef99.zip
Notes
Diffstat (limited to 'usr.bin')
-rw-r--r--usr.bin/rsh/rsh.114
-rw-r--r--usr.bin/rsh/rsh.c23
2 files changed, 26 insertions, 11 deletions
diff --git a/usr.bin/rsh/rsh.1 b/usr.bin/rsh/rsh.1
index 56c5e6c3dece..56077cb5afaa 100644
--- a/usr.bin/rsh/rsh.1
+++ b/usr.bin/rsh/rsh.1
@@ -36,7 +36,7 @@
.Nd remote shell
.Sh SYNOPSIS
.Nm
-.Op Fl 46dn
+.Op Fl 46dnN
.Op Fl l Ar username
.Op Fl t Ar timeout
.Ar host
@@ -87,12 +87,22 @@ By default, the remote username is the same as the local username.
Authorization is determined
as in
.Xr rlogin 1 .
+.It Fl N
+Opposite to
+.Fl n
+option: do not send the "end of file" (EOF) indication for input stream
+to the remote host. This option makes the
+.Nm
+utility compatible with protocol implementations confused by receiving
+EOF, like some Cisco IOS versions. Disables
+.Fl n .
.It Fl n
Redirect input from the special device
.Pa /dev/null
(see the
.Sx BUGS
-section of this manual page).
+section of this manual page). Disables
+.Fl N .
.It Fl t Ar timeout
Allow a
.Ar timeout
diff --git a/usr.bin/rsh/rsh.c b/usr.bin/rsh/rsh.c
index 5fa33e24b26b..4a39ccdaedd9 100644
--- a/usr.bin/rsh/rsh.c
+++ b/usr.bin/rsh/rsh.c
@@ -85,7 +85,7 @@ static char rlogin[] = "rlogin";
void connect_timeout(int);
char *copyargs(char * const *);
void sendsig(int);
-void talk(int, long, pid_t, int, int);
+void talk(int, int, long, pid_t, int, int);
void usage(void);
int
@@ -94,13 +94,13 @@ main(int argc, char *argv[])
struct passwd const *pw;
struct servent const *sp;
long omask;
- int argoff, asrsh, ch, dflag, nflag, one, rem;
+ int argoff, asrsh, ch, dflag, nflag, Nflag, one, rem;
pid_t pid = 0;
uid_t uid;
char *args, *host, *p, *user;
int timeout = 0;
- argoff = asrsh = dflag = nflag = 0;
+ argoff = asrsh = dflag = nflag = Nflag = 0;
one = 1;
host = user = NULL;
@@ -120,7 +120,7 @@ main(int argc, char *argv[])
argoff = 1;
}
-#define OPTIONS "468Lde:l:nt:w"
+#define OPTIONS "468LNde:l:nt:w"
while ((ch = getopt(argc - argoff, argv + argoff, OPTIONS)) != -1)
switch(ch) {
case '4':
@@ -131,6 +131,10 @@ main(int argc, char *argv[])
family = PF_INET6;
break;
+ case 'N':
+ Nflag = 1;
+ nflag = 0;
+ break;
case 'L': /* -8Lew are ignored to allow rlogin aliases */
case 'e':
case 'w':
@@ -144,6 +148,7 @@ main(int argc, char *argv[])
break;
case 'n':
nflag = 1;
+ Nflag = 0;
break;
case 't':
timeout = atoi(optarg);
@@ -227,7 +232,7 @@ main(int argc, char *argv[])
(void)ioctl(rfd2, FIONBIO, &one);
(void)ioctl(rem, FIONBIO, &one);
- talk(nflag, omask, pid, rem, timeout);
+ talk(nflag, Nflag, omask, pid, rem, timeout);
if (!nflag)
(void)kill(pid, SIGKILL);
@@ -235,7 +240,7 @@ main(int argc, char *argv[])
}
void
-talk(int nflag, long omask, pid_t pid, int rem, int timeout)
+talk(int nflag, int Nflag, long omask, pid_t pid, int rem, int timeout)
{
int cc, wc;
fd_set readfrom, ready, rembits;
@@ -276,8 +281,8 @@ rewrite:
if (cc == 0)
goto reread;
goto rewrite;
-done:
- (void)shutdown(rem, SHUT_WR);
+done: if (!Nflag)
+ (void)shutdown(rem, SHUT_WR);
exit(0);
}
@@ -371,6 +376,6 @@ usage(void)
{
(void)fprintf(stderr,
- "usage: rsh [-46dn] [-l username] [-t timeout] host [command]\n");
+ "usage: rsh [-46Ndn] [-l username] [-t timeout] host [command]\n");
exit(1);
}