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);
 }
_______________________________________________
svn-src-stable-10@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-stable-10
To unsubscribe, send any mail to "svn-src-stable-10-unsubscr...@freebsd.org"

Reply via email to