|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
We can get stuck if a write is going to block because both ends are writing and
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
neither end is reading. This is a port of a patch which aims to solve that
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
problem, but for now it's incomplete because we don't handle partial writes. A
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
proper non-blocking implementation would require a bit more work.
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
diff -up krb5-1.7/src/appl/bsd/defines.h krb5-1.7/src/appl/bsd/defines.h
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
--- krb5-1.7/src/appl/bsd/defines.h 2008-12-15 15:29:01.000000000 -0500
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+++ krb5-1.7/src/appl/bsd/defines.h 2009-06-04 14:18:48.000000000 -0400
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
@@ -34,6 +34,7 @@ extern int kcmd (int *sock, char **ahost
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
enum kcmd_proto *protonum /* input and output */
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+extern int rcmd_stream_has_unsent_data (void);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
extern int rcmd_stream_read (int fd, char *buf, size_t len, int secondary);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
extern int rcmd_stream_write (int fd, char *buf, size_t len, int secondary);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
extern int getport (int * /* portnum */, int * /* addrfamily */);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
diff -up krb5-1.7/src/appl/bsd/kcmd.c krb5-1.7/src/appl/bsd/kcmd.c
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
--- krb5-1.7/src/appl/bsd/kcmd.c 2009-04-15 16:07:15.000000000 -0400
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+++ krb5-1.7/src/appl/bsd/kcmd.c 2009-06-04 14:18:48.000000000 -0400
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
@@ -686,6 +686,11 @@ void rcmd_stream_init_normal()
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
output = twrite;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
}
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+int rcmd_stream_has_unsent_data (void)
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+{
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ return (nstored > 0);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+}
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
void rcmd_stream_init_krb5(in_keyblock, encrypt_flag, lencheck, am_client,
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
protonum)
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
krb5_keyblock *in_keyblock;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
@@ -846,7 +851,8 @@ static int v5_des_read(fd, buf, len, sec
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
cc = krb5_net_read(bsd_context, fd, &c, 1);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
/* we should check for non-blocking here, but we'd have
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
to make it save partial reads as well. */
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
- if (cc <= 0) return cc; /* read error */
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ if (cc == 0) return nreturned; /* EOF */
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ if (cc < 0) return cc; /* read error */
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
if (cc == 1) {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
if (c == 0 || !do_lencheck) break;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
}
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
diff -up krb5-1.7/src/appl/bsd/krsh.c krb5-1.7/src/appl/bsd/krsh.c
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
--- krb5-1.7/src/appl/bsd/krsh.c 2009-06-04 14:18:47.000000000 -0400
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+++ krb5-1.7/src/appl/bsd/krsh.c 2009-06-04 14:18:48.000000000 -0400
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
@@ -115,10 +115,11 @@ main(argc, argv0)
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
char **argv0;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
{
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
int rem, pid = 0;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
- char *host=0, **ap, buf[RCMD_BUFSIZ], *args, **argv = argv0, *user = 0;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ char *host=0, **ap, buf[PIPE_BUF], *args, **argv = argv0, *user = 0;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
register int cc;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
struct passwd *pwd;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
fd_set readfrom, ready;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ fd_set writeto, ready_wr;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
int one = 1;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
struct servent *sp;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
struct servent defaultservent;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
@@ -508,9 +509,14 @@ main(argc, argv0)
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
FD_ZERO(&readfrom);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
FD_SET(rfd2, &readfrom);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
FD_SET(rem, &readfrom);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ FD_ZERO(&writeto);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
do {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ int max_fd;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ max_fd = (rfd2 > rem) ? rfd2 : rem;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ max_fd = (max_fd > 2) ? max_fd : 2;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
ready = readfrom;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
- if (select(((rfd2 > rem) ? rfd2 : rem) + 1, &ready, 0, 0, 0) < 0) {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ ready_wr = writeto;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ if (select(max_fd + 1, &ready, &ready_wr, 0, 0) < 0) {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
if (errno != EINTR) {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
perror("select");
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
exit(1);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
@@ -518,22 +524,38 @@ main(argc, argv0)
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
continue;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
}
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
if (FD_ISSET(rfd2, &ready)) {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
- errno = 0;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
- cc = rcmd_stream_read(rfd2, buf, sizeof buf, 1);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
- if (cc <= 0) {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
- if ((errno != EWOULDBLOCK) && (errno != EAGAIN))
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
- FD_CLR(rfd2, &readfrom);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
- } else
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
- (void) write(2, buf, (unsigned) cc);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ FD_SET(2, &writeto);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ if (FD_ISSET(2, &ready_wr)) {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ do {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ errno = 0;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ cc = rcmd_stream_read(rfd2, buf, sizeof buf, 1);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ if (cc <= 0) {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ if ((errno != EWOULDBLOCK) && (errno != EAGAIN)) {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ FD_CLR(rfd2, &readfrom);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ } else
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ (void) write(2, buf, (unsigned) cc);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ } while (rcmd_stream_has_unsent_data());
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ FD_CLR(2, &writeto);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
}
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
if (FD_ISSET(rem, &ready)) {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
- errno = 0;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
- cc = rcmd_stream_read(rem, buf, sizeof buf, 0);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
- if (cc <= 0) {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
- if ((errno != EWOULDBLOCK) && (errno != EAGAIN))
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
- FD_CLR(rem, &readfrom);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
- } else
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
- (void) write(1, buf, (unsigned) cc);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ FD_SET(1, &writeto);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ if (FD_ISSET(1, &ready_wr)) {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ do {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ errno = 0;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ cc = rcmd_stream_read(rem, buf, sizeof buf, 0);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ if (cc <= 0) {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ if ((errno != EWOULDBLOCK) && (errno != EAGAIN)) {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ FD_CLR(rem, &readfrom);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ } else
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ (void) write(1, buf, (unsigned) cc);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ } while (rcmd_stream_has_unsent_data());
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ FD_CLR(1, &writeto);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
}
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
} while (FD_ISSET(rem, &readfrom) || FD_ISSET(rfd2, &readfrom));
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
if (nflag == 0)
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
diff -up krb5-1.7/src/appl/bsd/krshd.c krb5-1.7/src/appl/bsd/krshd.c
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
--- krb5-1.7/src/appl/bsd/krshd.c 2009-06-04 14:18:47.000000000 -0400
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+++ krb5-1.7/src/appl/bsd/krshd.c 2009-06-04 14:18:48.000000000 -0400
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
@@ -583,7 +583,8 @@ void doit(f, fromp)
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
short port;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
int pv[2], pw[2], px[2], cc;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
fd_set ready, readfrom;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
- char buf[RCMD_BUFSIZ], sig;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ fd_set ready_wr, writeto;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ char buf[PIPE_BUF], sig;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
struct sockaddr_storage localaddr;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
#ifdef POSIX_SIGNALS
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
struct sigaction sa;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
@@ -1214,6 +1215,10 @@ void doit(f, fromp)
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
if (pw[0] > maxfd)
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
maxfd = pw[0];
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ if (px[1] > maxfd)
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ maxfd = px[1];
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ FD_ZERO(&writeto);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
/* read from f, write to px[1] -- child stdin */
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
/* read from s, signal child */
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
/* read from pv[0], write to s -- child stderr */
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
@@ -1221,36 +1226,47 @@ void doit(f, fromp)
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
do {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
ready = readfrom;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
- if (select(maxfd + 1, &ready, (fd_set *)0,
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ ready_wr = writeto;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ if (select(maxfd + 1, &ready, &ready_wr,
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
(fd_set *)0, (struct timeval *)0) < 0) {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
if (errno == EINTR) {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
continue;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
} else {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
break;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
- }
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
}
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
if (port&&FD_ISSET(pv[0], &ready)) {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ FD_SET(s, &writeto);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ FD_CLR(pv[0], &readfrom);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ if (port&&FD_ISSET(s, &ready_wr)) {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
/* read from the child stderr, write to the net */
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
errno = 0;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
cc = read(pv[0], buf, sizeof (buf));
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
- if (cc <= 0) {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ if ((cc <= 0) ||
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ (rcmd_stream_write(s, buf, (unsigned) cc, 1) != cc)) {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
shutdown(s, 1+1);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
- FD_CLR(pv[0], &readfrom);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
} else {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
- (void) rcmd_stream_write(s, buf, (unsigned) cc, 1);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ FD_SET(pv[0], &readfrom);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
}
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ FD_CLR(s, &writeto);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
}
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
if (FD_ISSET(pw[0], &ready)) {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ FD_SET(f, &writeto);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ FD_CLR(pw[0], &readfrom);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ if (FD_ISSET(f, &ready_wr)) {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
/* read from the child stdout, write to the net */
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
errno = 0;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
cc = read(pw[0], buf, sizeof (buf));
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
- if (cc <= 0) {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ if ((cc <= 0) ||
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ (rcmd_stream_write(f, buf, (unsigned) cc, 0) != cc)) {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
shutdown(f, 1+1);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
- FD_CLR(pw[0], &readfrom);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
} else {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
- (void) rcmd_stream_write(f, buf, (unsigned) cc, 0);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ FD_SET(pw[0], &readfrom);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
}
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ FD_CLR(f, &writeto);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
}
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
if (port&&FD_ISSET(s, &ready)) {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
/* read from the alternate channel, signal the child */
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
@@ -1268,12 +1284,15 @@ void doit(f, fromp)
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
}
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
}
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
if (FD_ISSET(f, &ready)) {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ FD_SET(px[1], &writeto);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ FD_CLR(f, &readfrom);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ if (FD_ISSET(px[1], &ready_wr)) {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
/* read from the net, write to child stdin */
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
errno = 0;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
cc = rcmd_stream_read(f, buf, sizeof(buf), 0);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
if (cc <= 0) {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
(void) close(px[1]);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
- FD_CLR(f, &readfrom);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
} else {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
int wcc;
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
wcc = write(px[1], buf, (unsigned) cc);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
@@ -1281,17 +1300,22 @@ void doit(f, fromp)
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
/* pipe closed, don't read any more */
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
/* might check for EPIPE */
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
(void) close(px[1]);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
- FD_CLR(f, &readfrom);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
- } else if (wcc != cc) {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
- syslog(LOG_INFO, "only wrote %d/%d to child",
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
- wcc, cc);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ } else {
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ if (wcc != cc)
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ syslog(LOG_INFO, "only wrote %d/%d to child",
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ wcc, cc);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ FD_SET(f, &readfrom);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
}
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
}
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ FD_CLR(px[1], &writeto);
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
}
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
} while ((port&&FD_ISSET(s, &readfrom)) ||
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
FD_ISSET(f, &readfrom) ||
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
(port&&FD_ISSET(pv[0], &readfrom) )||
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
- FD_ISSET(pw[0], &readfrom));
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ FD_ISSET(pw[0], &readfrom) ||
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ (port&&FD_ISSET(s, &writeto)) ||
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ FD_ISSET(f, &writeto) ||
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
+ FD_ISSET(px[1], &writeto));
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
ignore_signals();
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
#ifdef KERBEROS
|
|
![](https://seccdn.libravatar.org/avatar/830d03208be58a30581b9ec914163ac3247fea9d7b90dfa476b86f1ed9183af9?s=16&d=retro) |
6879d98 |
syslog(LOG_INFO ,
|