=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/rsh/Attic/rsh.c,v retrieving revision 1.16 retrieving revision 1.17 diff -c -r1.16 -r1.17 *** src/usr.bin/rsh/Attic/rsh.c 1997/08/06 06:43:41 1.16 --- src/usr.bin/rsh/Attic/rsh.c 1998/03/25 19:53:21 1.17 *************** *** 1,4 **** ! /* $OpenBSD: rsh.c,v 1.16 1997/08/06 06:43:41 deraadt Exp $ */ /*- * Copyright (c) 1983, 1990 The Regents of the University of California. --- 1,4 ---- ! /* $OpenBSD: rsh.c,v 1.17 1998/03/25 19:53:21 art Exp $ */ /*- * Copyright (c) 1983, 1990 The Regents of the University of California. *************** *** 41,47 **** #ifndef lint /*static char sccsid[] = "from: @(#)rsh.c 5.24 (Berkeley) 7/1/91";*/ ! static char rcsid[] = "$OpenBSD: rsh.c,v 1.16 1997/08/06 06:43:41 deraadt Exp $"; #endif /* not lint */ #include --- 41,47 ---- #ifndef lint /*static char sccsid[] = "from: @(#)rsh.c 5.24 (Berkeley) 7/1/91";*/ ! static char rcsid[] = "$OpenBSD: rsh.c,v 1.17 1998/03/25 19:53:21 art Exp $"; #endif /* not lint */ #include *************** *** 55,60 **** --- 55,62 ---- #include #include #include + #include + #include #include #include #ifdef __STDC__ *************** *** 74,87 **** --- 76,101 ---- char dst_realm_buf[REALM_SZ], *dest_realm; 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 + void usage __P((void)); + + void talk __P((int, int, int, register int)); + /* * rsh - remote shell */ extern int errno; int rfd2; + int main(argc, argv) int argc; char **argv; *************** *** 91,97 **** struct passwd *pw; struct servent *sp; int omask; ! int argoff, asrsh, ch, dflag, nflag, one, pid, rem, uid; register char *p; char *args, *host, *user, *copyargs(); void sendsig(); --- 105,111 ---- struct passwd *pw; struct servent *sp; int omask; ! int argoff, asrsh, ch, dflag, nflag, one, pid = 0, rem, uid; register char *p; char *args, *host, *user, *copyargs(); void sendsig(); *************** *** 101,107 **** host = user = NULL; /* if called as something other than "rsh", use it as the host name */ ! if (p = strrchr(argv[0], '/')) ++p; else p = argv[0]; --- 115,121 ---- host = user = NULL; /* if called as something other than "rsh", use it as the host name */ ! if ((p = strrchr(argv[0], '/'))) ++p; else p = argv[0]; *************** *** 151,157 **** #ifdef KERBEROS case 'x': doencrypt = 1; ! desrw_set_key(&cred.session, schedule); break; #endif case '?': --- 165,171 ---- #ifdef KERBEROS case 'x': doencrypt = 1; ! desrw_set_key(&cred.session, &schedule); break; #endif case '?': *************** *** 306,314 **** if (!nflag) (void)kill(pid, SIGKILL); ! exit(0); } talk(nflag, omask, pid, rem) int nflag, pid; int omask; --- 320,330 ---- if (!nflag) (void)kill(pid, SIGKILL); ! ! return 0; } + void talk(nflag, omask, pid, rem) int nflag, pid; int omask; *************** *** 316,322 **** { register int cc, wc; register char *bp; ! int readfrom, ready, rembits; char buf[BUFSIZ]; if (!nflag && pid == 0) { --- 332,338 ---- { register int cc, wc; register char *bp; ! fd_set readfrom, ready, rembits; char buf[BUFSIZ]; if (!nflag && pid == 0) { *************** *** 327,333 **** goto done; bp = buf; ! rewrite: rembits = 1 << rem; if (select(rem + 1, 0, &rembits, 0, 0) < 0) { if (errno != EINTR) { (void)fprintf(stderr, --- 343,350 ---- goto done; bp = buf; ! rewrite: FD_ZERO(&rembits); ! FD_SET(rem, &rembits); if (select(rem + 1, 0, &rembits, 0, 0) < 0) { if (errno != EINTR) { (void)fprintf(stderr, *************** *** 336,342 **** } goto rewrite; } ! if ((rembits & (1 << rem)) == 0) goto rewrite; #ifdef KERBEROS if (doencrypt) --- 353,359 ---- } goto rewrite; } ! if (!FD_ISSET(rem, &rembits)) goto rewrite; #ifdef KERBEROS if (doencrypt) *************** *** 360,368 **** } (void)sigsetmask(omask); ! readfrom = (1 << rfd2) | (1 << rem); do { ! ready = readfrom; if (select(MAX(rfd2, rem) + 1, &ready, 0, 0, 0) < 0) { if (errno != EINTR) { (void)fprintf(stderr, --- 377,387 ---- } (void)sigsetmask(omask); ! FD_ZERO(&readfrom); ! FD_SET(rfd2, &readfrom); ! FD_SET(rem, &readfrom); do { ! FD_COPY(&readfrom, &ready); if (select(MAX(rfd2, rem) + 1, &ready, 0, 0, 0) < 0) { if (errno != EINTR) { (void)fprintf(stderr, *************** *** 371,377 **** } continue; } ! if (ready & (1 << rfd2)) { errno = 0; #ifdef KERBEROS if (doencrypt) --- 390,396 ---- } continue; } ! if (FD_ISSET(rfd2, &ready)) { errno = 0; #ifdef KERBEROS if (doencrypt) *************** *** 381,391 **** cc = read(rfd2, buf, sizeof buf); if (cc <= 0) { if (errno != EWOULDBLOCK) ! readfrom &= ~(1 << rfd2); } else (void)write(2, buf, cc); } ! if (ready & (1 << rem)) { errno = 0; #ifdef KERBEROS if (doencrypt) --- 400,410 ---- cc = read(rfd2, buf, sizeof buf); if (cc <= 0) { if (errno != EWOULDBLOCK) ! FD_CLR(rfd2, &readfrom); } else (void)write(2, buf, cc); } ! if (FD_ISSET(rem, &ready)) { errno = 0; #ifdef KERBEROS if (doencrypt) *************** *** 395,405 **** cc = read(rem, buf, sizeof buf); if (cc <= 0) { if (errno != EWOULDBLOCK) ! readfrom &= ~(1 << rem); } else (void)write(1, buf, cc); } ! } while (readfrom); } void --- 414,424 ---- cc = read(rem, buf, sizeof buf); if (cc <= 0) { if (errno != EWOULDBLOCK) ! FD_CLR(rem, &readfrom); } else (void)write(1, buf, cc); } ! } while (FD_ISSET(rem, &readfrom) || FD_ISSET(rfd2, &readfrom)); } void *************** *** 472,478 **** return(args); } ! usage() { (void)fprintf(stderr, "usage: rsh [-nd%s]%s[-l login] host [command]\n", --- 491,498 ---- return(args); } ! void ! usage(void) { (void)fprintf(stderr, "usage: rsh [-nd%s]%s[-l login] host [command]\n",