mirror of
git://anongit.mindrot.org/openssh.git
synced 2024-12-22 10:00:14 +00:00
upstream: include a little more information about the status and
disposition of channel's extended (stderr) fd; makes debugging some things a bit easier. No behaviour change. OpenBSD-Commit-ID: 483eb6467dc7d5dbca8eb109c453e7a43075f7ce
This commit is contained in:
parent
2d1428b11c
commit
f1dd179e12
29
channels.c
29
channels.c
@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: channels.c,v 1.384 2018/07/27 12:03:17 markus Exp $ */
|
||||
/* $OpenBSD: channels.c,v 1.385 2018/10/04 00:10:11 djm Exp $ */
|
||||
/*
|
||||
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
||||
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
||||
@ -799,6 +799,25 @@ channel_find_open(struct ssh *ssh)
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Returns the state of the channel's extended usage flag */
|
||||
const char *
|
||||
channel_format_extended_usage(const Channel *c)
|
||||
{
|
||||
if (c->efd == -1)
|
||||
return "closed";
|
||||
|
||||
switch (c->extended_usage) {
|
||||
case CHAN_EXTENDED_WRITE:
|
||||
return "write";
|
||||
case CHAN_EXTENDED_READ:
|
||||
return "read";
|
||||
case CHAN_EXTENDED_IGNORE:
|
||||
return "ignore";
|
||||
default:
|
||||
return "UNKNOWN";
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns a message describing the currently open forwarded connections,
|
||||
* suitable for sending to the client. The message contains crlf pairs for
|
||||
@ -845,13 +864,16 @@ channel_open_message(struct ssh *ssh)
|
||||
case SSH_CHANNEL_MUX_PROXY:
|
||||
case SSH_CHANNEL_MUX_CLIENT:
|
||||
if ((r = sshbuf_putf(buf, " #%d %.300s "
|
||||
"(t%d %s%u i%u/%zu o%u/%zu fd %d/%d cc %d)\r\n",
|
||||
"(t%d %s%u i%u/%zu o%u/%zu "
|
||||
"fd %d/%d/%d [%s] sock %d cc %d)\r\n",
|
||||
c->self, c->remote_name,
|
||||
c->type,
|
||||
c->have_remote_id ? "r" : "nr", c->remote_id,
|
||||
c->istate, sshbuf_len(c->input),
|
||||
c->ostate, sshbuf_len(c->output),
|
||||
c->rfd, c->wfd, c->ctl_chan)) != 0)
|
||||
c->rfd, c->wfd, c->efd,
|
||||
channel_format_extended_usage(c),
|
||||
c->sock, c->ctl_chan)) != 0)
|
||||
fatal("%s: sshbuf_putf: %s",
|
||||
__func__, ssh_err(r));
|
||||
continue;
|
||||
@ -2352,6 +2374,7 @@ channel_garbage_collect(struct ssh *ssh, Channel *c)
|
||||
if (c->detach_user != NULL) {
|
||||
if (!chan_is_dead(ssh, c, c->detach_close))
|
||||
return;
|
||||
|
||||
debug2("channel %d: gc: notify user", c->self);
|
||||
c->detach_user(ssh, c->self, NULL);
|
||||
/* if we still have a callback */
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: channels.h,v 1.131 2018/06/06 18:22:41 djm Exp $ */
|
||||
/* $OpenBSD: channels.h,v 1.132 2018/10/04 00:10:11 djm Exp $ */
|
||||
|
||||
/*
|
||||
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
||||
@ -285,6 +285,7 @@ void channel_output_poll(struct ssh *);
|
||||
int channel_not_very_much_buffered_data(struct ssh *);
|
||||
void channel_close_all(struct ssh *);
|
||||
int channel_still_open(struct ssh *);
|
||||
const char *channel_format_extended_usage(const Channel *);
|
||||
char *channel_open_message(struct ssh *);
|
||||
int channel_find_open(struct ssh *);
|
||||
|
||||
|
52
nchan.c
52
nchan.c
@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: nchan.c,v 1.67 2017/09/12 06:35:32 djm Exp $ */
|
||||
/* $OpenBSD: nchan.c,v 1.68 2018/10/04 00:10:11 djm Exp $ */
|
||||
/*
|
||||
* Copyright (c) 1999, 2000, 2001, 2002 Markus Friedl. All rights reserved.
|
||||
*
|
||||
@ -373,17 +373,23 @@ chan_shutdown_write(struct ssh *ssh, Channel *c)
|
||||
if (c->type == SSH_CHANNEL_LARVAL)
|
||||
return;
|
||||
/* shutdown failure is allowed if write failed already */
|
||||
debug2("channel %d: close_write", c->self);
|
||||
debug2("channel %d: %s (i%d o%d sock %d wfd %d efd %d [%s])",
|
||||
c->self, __func__, c->istate, c->ostate, c->sock, c->wfd, c->efd,
|
||||
channel_format_extended_usage(c));
|
||||
if (c->sock != -1) {
|
||||
if (shutdown(c->sock, SHUT_WR) < 0)
|
||||
debug2("channel %d: chan_shutdown_write: "
|
||||
"shutdown() failed for fd %d: %.100s",
|
||||
c->self, c->sock, strerror(errno));
|
||||
if (shutdown(c->sock, SHUT_WR) < 0) {
|
||||
debug2("channel %d: %s: shutdown() failed for "
|
||||
"fd %d [i%d o%d]: %.100s", c->self, __func__,
|
||||
c->sock, c->istate, c->ostate,
|
||||
strerror(errno));
|
||||
}
|
||||
} else {
|
||||
if (channel_close_fd(ssh, &c->wfd) < 0)
|
||||
logit("channel %d: chan_shutdown_write: "
|
||||
"close() failed for fd %d: %.100s",
|
||||
c->self, c->wfd, strerror(errno));
|
||||
if (channel_close_fd(ssh, &c->wfd) < 0) {
|
||||
logit("channel %d: %s: close() failed for "
|
||||
"fd %d [i%d o%d]: %.100s",
|
||||
c->self, __func__, c->wfd, c->istate, c->ostate,
|
||||
strerror(errno));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -392,23 +398,27 @@ chan_shutdown_read(struct ssh *ssh, Channel *c)
|
||||
{
|
||||
if (c->type == SSH_CHANNEL_LARVAL)
|
||||
return;
|
||||
debug2("channel %d: close_read", c->self);
|
||||
debug2("channel %d: %s (i%d o%d sock %d wfd %d efd %d [%s])",
|
||||
c->self, __func__, c->istate, c->ostate, c->sock, c->rfd, c->efd,
|
||||
channel_format_extended_usage(c));
|
||||
if (c->sock != -1) {
|
||||
/*
|
||||
* shutdown(sock, SHUT_READ) may return ENOTCONN if the
|
||||
* write side has been closed already. (bug on Linux)
|
||||
* HP-UX may return ENOTCONN also.
|
||||
*/
|
||||
if (shutdown(c->sock, SHUT_RD) < 0
|
||||
&& errno != ENOTCONN)
|
||||
error("channel %d: chan_shutdown_read: "
|
||||
"shutdown() failed for fd %d [i%d o%d]: %.100s",
|
||||
c->self, c->sock, c->istate, c->ostate,
|
||||
strerror(errno));
|
||||
if (shutdown(c->sock, SHUT_RD) < 0 && errno != ENOTCONN) {
|
||||
error("channel %d: %s: shutdown() failed for "
|
||||
"fd %d [i%d o%d]: %.100s",
|
||||
c->self, __func__, c->sock, c->istate, c->ostate,
|
||||
strerror(errno));
|
||||
}
|
||||
} else {
|
||||
if (channel_close_fd(ssh, &c->rfd) < 0)
|
||||
logit("channel %d: chan_shutdown_read: "
|
||||
"close() failed for fd %d: %.100s",
|
||||
c->self, c->rfd, strerror(errno));
|
||||
if (channel_close_fd(ssh, &c->rfd) < 0) {
|
||||
logit("channel %d: %s: close() failed for "
|
||||
"fd %d [i%d o%d]: %.100s",
|
||||
c->self, __func__, c->rfd, c->istate, c->ostate,
|
||||
strerror(errno));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: session.c,v 1.306 2018/10/02 12:40:07 djm Exp $ */
|
||||
/* $OpenBSD: session.c,v 1.307 2018/10/04 00:10:11 djm Exp $ */
|
||||
/*
|
||||
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
||||
* All rights reserved
|
||||
@ -2262,13 +2262,13 @@ void
|
||||
session_pty_cleanup2(Session *s)
|
||||
{
|
||||
if (s == NULL) {
|
||||
error("session_pty_cleanup: no session");
|
||||
error("%s: no session", __func__);
|
||||
return;
|
||||
}
|
||||
if (s->ttyfd == -1)
|
||||
return;
|
||||
|
||||
debug("session_pty_cleanup: session %d release %s", s->self, s->tty);
|
||||
debug("%s: session %d release %s", __func__, s->self, s->tty);
|
||||
|
||||
/* Record that the user has logged out. */
|
||||
if (s->pid != 0)
|
||||
@ -2479,7 +2479,8 @@ session_close_by_channel(struct ssh *ssh, int id, void *arg)
|
||||
}
|
||||
debug("%s: channel %d child %ld", __func__, id, (long)s->pid);
|
||||
if (s->pid != 0) {
|
||||
debug("%s: channel %d: has child", __func__, id);
|
||||
debug("%s: channel %d: has child, ttyfd %d",
|
||||
__func__, id, s->ttyfd);
|
||||
/*
|
||||
* delay detach of session, but release pty, since
|
||||
* the fd's to the child are already closed
|
||||
|
Loading…
Reference in New Issue
Block a user