[BACK]Return to rsh.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / rsh

Diff for /src/usr.bin/rsh/Attic/rsh.c between version 1.16 and 1.17

version 1.16, 1997/08/06 06:43:41 version 1.17, 1998/03/25 19:53:21
Line 55 
Line 55 
 #include <pwd.h>  #include <pwd.h>
 #include <signal.h>  #include <signal.h>
 #include <stdio.h>  #include <stdio.h>
   #include <stdlib.h>
   #include <unistd.h>
 #include <errno.h>  #include <errno.h>
 #include <string.h>  #include <string.h>
 #ifdef __STDC__  #ifdef __STDC__
Line 74 
Line 76 
 char dst_realm_buf[REALM_SZ], *dest_realm;  char dst_realm_buf[REALM_SZ], *dest_realm;
   
 void warning __P((const char *, ...));  void warning __P((const char *, ...));
   void desrw_set_key __P((des_cblock *, des_key_schedule *));
   int des_read __P((int, char *, int));
   int des_write __P((int, char *, int));
   
   int krcmd __P((char **, u_short, char *, char *, int *, char *));
   int krcmd_mutual __P((char **, u_short, char *, char *, int *, char *,
                         CREDENTIALS *, Key_schedule));
 #endif  #endif
   
   void usage __P((void));
   
   void talk __P((int, int, int, register int));
   
 /*  /*
  * rsh - remote shell   * rsh - remote shell
  */   */
 extern int errno;  extern int errno;
 int rfd2;  int rfd2;
   
   int
 main(argc, argv)  main(argc, argv)
         int argc;          int argc;
         char **argv;          char **argv;
Line 91 
Line 105 
         struct passwd *pw;          struct passwd *pw;
         struct servent *sp;          struct servent *sp;
         int omask;          int omask;
         int argoff, asrsh, ch, dflag, nflag, one, pid, rem, uid;          int argoff, asrsh, ch, dflag, nflag, one, pid = 0, rem, uid;
         register char *p;          register char *p;
         char *args, *host, *user, *copyargs();          char *args, *host, *user, *copyargs();
         void sendsig();          void sendsig();
Line 101 
Line 115 
         host = user = NULL;          host = user = NULL;
   
         /* if called as something other than "rsh", use it as the host name */          /* if called as something other than "rsh", use it as the host name */
         if (p = strrchr(argv[0], '/'))          if ((p = strrchr(argv[0], '/')))
                 ++p;                  ++p;
         else          else
                 p = argv[0];                  p = argv[0];
Line 151 
Line 165 
 #ifdef KERBEROS  #ifdef KERBEROS
                 case 'x':                  case 'x':
                         doencrypt = 1;                          doencrypt = 1;
                         desrw_set_key(&cred.session, schedule);                          desrw_set_key(&cred.session, &schedule);
                         break;                          break;
 #endif  #endif
                 case '?':                  case '?':
Line 306 
Line 320 
   
         if (!nflag)          if (!nflag)
                 (void)kill(pid, SIGKILL);                  (void)kill(pid, SIGKILL);
         exit(0);  
           return 0;
 }  }
   
   void
 talk(nflag, omask, pid, rem)  talk(nflag, omask, pid, rem)
         int nflag, pid;          int nflag, pid;
         int omask;          int omask;
Line 316 
Line 332 
 {  {
         register int cc, wc;          register int cc, wc;
         register char *bp;          register char *bp;
         int readfrom, ready, rembits;          fd_set readfrom, ready, rembits;
         char buf[BUFSIZ];          char buf[BUFSIZ];
   
         if (!nflag && pid == 0) {          if (!nflag && pid == 0) {
Line 327 
Line 343 
                         goto done;                          goto done;
                 bp = buf;                  bp = buf;
   
 rewrite:        rembits = 1 << rem;  rewrite:        FD_ZERO(&rembits);
                   FD_SET(rem, &rembits);
                 if (select(rem + 1, 0, &rembits, 0, 0) < 0) {                  if (select(rem + 1, 0, &rembits, 0, 0) < 0) {
                         if (errno != EINTR) {                          if (errno != EINTR) {
                                 (void)fprintf(stderr,                                  (void)fprintf(stderr,
Line 336 
Line 353 
                         }                          }
                         goto rewrite;                          goto rewrite;
                 }                  }
                 if ((rembits & (1 << rem)) == 0)                  if (!FD_ISSET(rem, &rembits))
                         goto rewrite;                          goto rewrite;
 #ifdef KERBEROS  #ifdef KERBEROS
                 if (doencrypt)                  if (doencrypt)
Line 360 
Line 377 
         }          }
   
         (void)sigsetmask(omask);          (void)sigsetmask(omask);
         readfrom = (1 << rfd2) | (1 << rem);          FD_ZERO(&readfrom);
           FD_SET(rfd2, &readfrom);
           FD_SET(rem, &readfrom);
         do {          do {
                 ready = readfrom;                  FD_COPY(&readfrom, &ready);
                 if (select(MAX(rfd2, rem) + 1, &ready, 0, 0, 0) < 0) {                  if (select(MAX(rfd2, rem) + 1, &ready, 0, 0, 0) < 0) {
                         if (errno != EINTR) {                          if (errno != EINTR) {
                                 (void)fprintf(stderr,                                  (void)fprintf(stderr,
Line 371 
Line 390 
                         }                          }
                         continue;                          continue;
                 }                  }
                 if (ready & (1 << rfd2)) {                  if (FD_ISSET(rfd2, &ready)) {
                         errno = 0;                          errno = 0;
 #ifdef KERBEROS  #ifdef KERBEROS
                         if (doencrypt)                          if (doencrypt)
Line 381 
Line 400 
                                 cc = read(rfd2, buf, sizeof buf);                                  cc = read(rfd2, buf, sizeof buf);
                         if (cc <= 0) {                          if (cc <= 0) {
                                 if (errno != EWOULDBLOCK)                                  if (errno != EWOULDBLOCK)
                                         readfrom &= ~(1 << rfd2);                                          FD_CLR(rfd2, &readfrom);
                         } else                          } else
                                 (void)write(2, buf, cc);                                  (void)write(2, buf, cc);
                 }                  }
                 if (ready & (1 << rem)) {                  if (FD_ISSET(rem, &ready)) {
                         errno = 0;                          errno = 0;
 #ifdef KERBEROS  #ifdef KERBEROS
                         if (doencrypt)                          if (doencrypt)
Line 395 
Line 414 
                                 cc = read(rem, buf, sizeof buf);                                  cc = read(rem, buf, sizeof buf);
                         if (cc <= 0) {                          if (cc <= 0) {
                                 if (errno != EWOULDBLOCK)                                  if (errno != EWOULDBLOCK)
                                         readfrom &= ~(1 << rem);                                          FD_CLR(rem, &readfrom);
                         } else                          } else
                                 (void)write(1, buf, cc);                                  (void)write(1, buf, cc);
                 }                  }
         } while (readfrom);          } while (FD_ISSET(rem, &readfrom) || FD_ISSET(rfd2, &readfrom));
 }  }
   
 void  void
Line 472 
Line 491 
         return(args);          return(args);
 }  }
   
 usage()  void
   usage(void)
 {  {
         (void)fprintf(stderr,          (void)fprintf(stderr,
             "usage: rsh [-nd%s]%s[-l login] host [command]\n",              "usage: rsh [-nd%s]%s[-l login] host [command]\n",

Legend:
Removed from v.1.16  
changed lines
  Added in v.1.17