Module Name:    src
Committed By:   tls
Date:           Sun Aug 10 06:58:50 UTC 2014

Modified Files:
        src/usr.bin/rsh [tls-earlyentropy]: rsh.c

Log Message:
Rebase.


To generate a diff of this commit:
cvs rdiff -u -r1.33 -r1.33.18.1 src/usr.bin/rsh/rsh.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.bin/rsh/rsh.c
diff -u src/usr.bin/rsh/rsh.c:1.33 src/usr.bin/rsh/rsh.c:1.33.18.1
--- src/usr.bin/rsh/rsh.c:1.33	Mon Aug 29 14:22:46 2011
+++ src/usr.bin/rsh/rsh.c	Sun Aug 10 06:58:49 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: rsh.c,v 1.33 2011/08/29 14:22:46 joerg Exp $	*/
+/*	$NetBSD: rsh.c,v 1.33.18.1 2014/08/10 06:58:49 tls Exp $	*/
 
 /*-
  * Copyright (c) 1983, 1990, 1993, 1994
@@ -39,7 +39,7 @@ __COPYRIGHT("@(#) Copyright (c) 1983, 19
 #if 0
 static char sccsid[] = "@(#)rsh.c	8.4 (Berkeley) 4/29/95";
 #else
-__RCSID("$NetBSD: rsh.c,v 1.33 2011/08/29 14:22:46 joerg Exp $");
+__RCSID("$NetBSD: rsh.c,v 1.33.18.1 2014/08/10 06:58:49 tls Exp $");
 #endif
 #endif /* not lint */
 
@@ -76,7 +76,9 @@ int	remerr;
 static int sigs[] = { SIGINT, SIGTERM, SIGQUIT };
 
 static char   *copyargs(char **);
+#ifndef IN_RCMD
 static void	sendsig(int);
+#endif
 static int	checkfd(struct pollfd *, int);
 static void	talk(int, sigset_t *, pid_t, int);
 __dead static void	usage(void);
@@ -265,6 +267,7 @@ main(int argc, char **argv)
 
 	(void)sigprocmask(SIG_BLOCK, &nset, &oset);
 
+#ifndef IN_RCMD
 	for (i = 0; i < sizeof(sigs) / sizeof(sigs[0]); i++) {
 		struct sigaction sa;
 
@@ -273,6 +276,7 @@ main(int argc, char **argv)
 			(void)sigaction(sigs[i], &sa, NULL);
 		}
 	}
+#endif
 
 	if (!nflag) {
 		pid = fork();
@@ -282,13 +286,8 @@ main(int argc, char **argv)
 	else
 		pid = -1;
 
-#if defined(KERBEROS) && defined(CRYPT)
-	if (!doencrypt)
-#endif
-	{
-		(void)ioctl(remerr, FIONBIO, &one);
-		(void)ioctl(rem, FIONBIO, &one);
-	}
+	(void)ioctl(remerr, FIONBIO, &one);
+	(void)ioctl(rem, FIONBIO, &one);
 
 	talk(nflag, &oset, pid, rem);
 
@@ -305,17 +304,12 @@ checkfd(struct pollfd *fdp, int outfd)
 
 	if (fdp->revents & (POLLNVAL|POLLERR|POLLHUP))
 		return -1;
-	   
+
 	if ((fdp->revents & POLLIN) == 0)
 		return 0;
 
 	errno = 0;
-#if defined(KERBEROS) && defined(CRYPT)
-	if (doencrypt)
-		nr = des_read(fdp->fd, buf, sizeof buf);
-	else
-#endif
-		nr = read(fdp->fd, buf, sizeof buf);
+	nr = read(fdp->fd, buf, sizeof buf);
 
 	if (nr <= 0) {
 		if (errno != EAGAIN)
@@ -339,7 +333,7 @@ static void
 talk(int nflag, sigset_t *oset, __pid_t pid, int rem)
 {
 	int nr, nw, nfds;
-	struct pollfd fds[2], *fdp = &fds[0];
+	struct pollfd fds[3], *fdp = &fds[0];
 	char *bp, buf[BUFSIZ];
 
 	if (!nflag && pid == 0) {
@@ -380,12 +374,7 @@ rewrite:		if (poll(fdp, 1, INFTIM) == -1
 			if ((fdp->revents & POLLOUT) == 0)
 				goto rewrite;
 
-#if defined(KERBEROS) && defined(CRYPT)
-			if (doencrypt)
-				nw = des_write(rem, bp, nr);
-			else
-#endif
-				nw = write(rem, bp, nr);
+			nw = write(rem, bp, nr);
 
 			if (nw < 0) {
 				if (errno == EAGAIN)
@@ -400,39 +389,57 @@ done:
 		exit(0);
 	}
 
-	(void)sigprocmask(SIG_SETMASK, oset, NULL);
-	fds[0].events = fds[1].events = POLLIN|POLLNVAL|POLLERR|POLLHUP;
-	fds[0].fd = remerr;
-	fds[1].fd = rem;
+#ifdef IN_RCMD
 	fdp = &fds[0];
+	nfds = 3;
+	fds[0].events = POLLIN|POLLNVAL|POLLERR|POLLHUP;
+	fds[0].fd = 2;
+#else
+	(void)sigprocmask(SIG_SETMASK, oset, NULL);
+	fdp = &fds[1];
 	nfds = 2;
+	fds[0].events = 0;
+#endif
+	fds[1].events = fds[2].events = POLLIN|POLLNVAL|POLLERR|POLLHUP;
+	fds[1].fd = remerr;
+	fds[2].fd = rem;
 	do {
 		if (poll(fdp, nfds, INFTIM) == -1) {
 			if (errno != EINTR)
 				err(1, "poll");
 			continue;
 		}
-		if (fds[0].events != 0 && checkfd(&fds[0], 2) == -1) {
+		if ((fds[1].events != 0 && checkfd(&fds[1], 2) == -1)
+#ifdef IN_RCMD
+		    || (fds[0].events != 0 && checkfd(&fds[0], remerr) == -1)
+#endif
+		    ) {
+			nfds--;
+			fds[1].events = 0;
+#ifdef IN_RCMD
 			nfds--;
 			fds[0].events = 0;
-			fdp = &fds[1];
+#endif
+			fdp = &fds[2];
 		}
-		if (fds[1].events != 0 && checkfd(&fds[1], 1) == -1) {
+		if (fds[2].events != 0 && checkfd(&fds[2], 1) == -1) {
 			nfds--;
-			fds[1].events = 0;
+			fds[2].events = 0;
 		}
 	}
 	while (nfds);
 }
 
+#ifndef IN_RCMD
 static void
 sendsig(int sig)
 {
 	char signo;
 
 	signo = sig;
-		(void)write(remerr, &signo, 1);
+	(void)write(remerr, &signo, 1);
 }
+#endif
 
 
 static char *

Reply via email to