svn commit: r325474 - stable/10/usr.bin/rsh

Eugene Grosbein eugen at FreeBSD.org
Mon Nov 6 12:45:53 UTC 2017


Author: eugen (ports committer)
Date: Mon Nov  6 12:45:51 2017
New Revision: 325474
URL: https://svnweb.freebsd.org/changeset/base/325474

Log:
  MFC r324212:
  
    rsh: introduce new option -N disabling shutdown of socket sending path.
  
  PR:		205144
  Approved by:	mav (mentor)

Modified:
  stable/10/usr.bin/rsh/rsh.1
  stable/10/usr.bin/rsh/rsh.c

Modified: stable/10/usr.bin/rsh/rsh.1
==============================================================================
--- stable/10/usr.bin/rsh/rsh.1	Mon Nov  6 12:44:26 2017	(r325473)
+++ stable/10/usr.bin/rsh/rsh.1	Mon Nov  6 12:45:51 2017	(r325474)
@@ -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 loc
 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

Modified: stable/10/usr.bin/rsh/rsh.c
==============================================================================
--- stable/10/usr.bin/rsh/rsh.c	Mon Nov  6 12:44:26 2017	(r325473)
+++ stable/10/usr.bin/rsh/rsh.c	Mon Nov  6 12:45:51 2017	(r325474)
@@ -85,7 +85,7 @@ 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);
 }


More information about the svn-src-all mailing list