mirror of git://anongit.mindrot.org/openssh.git
upstream: better debug logging of sessions' exit status
OpenBSD-Commit-ID: 82237567fcd4098797cbdd17efa6ade08e1a36b0
This commit is contained in:
parent
a8c57bcb07
commit
f9f1800667
15
session.c
15
session.c
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: session.c,v 1.335 2023/03/07 06:09:14 dtucker Exp $ */
|
/* $OpenBSD: session.c,v 1.336 2023/08/10 23:05:48 djm Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
||||||
* All rights reserved
|
* All rights reserved
|
||||||
|
@ -2380,17 +2380,17 @@ session_exit_message(struct ssh *ssh, Session *s, int status)
|
||||||
{
|
{
|
||||||
Channel *c;
|
Channel *c;
|
||||||
int r;
|
int r;
|
||||||
|
char *note = NULL;
|
||||||
|
|
||||||
if ((c = channel_lookup(ssh, s->chanid)) == NULL)
|
if ((c = channel_lookup(ssh, s->chanid)) == NULL)
|
||||||
fatal_f("session %d: no channel %d", s->self, s->chanid);
|
fatal_f("session %d: no channel %d", s->self, s->chanid);
|
||||||
debug_f("session %d channel %d pid %ld",
|
|
||||||
s->self, s->chanid, (long)s->pid);
|
|
||||||
|
|
||||||
if (WIFEXITED(status)) {
|
if (WIFEXITED(status)) {
|
||||||
channel_request_start(ssh, s->chanid, "exit-status", 0);
|
channel_request_start(ssh, s->chanid, "exit-status", 0);
|
||||||
if ((r = sshpkt_put_u32(ssh, WEXITSTATUS(status))) != 0 ||
|
if ((r = sshpkt_put_u32(ssh, WEXITSTATUS(status))) != 0 ||
|
||||||
(r = sshpkt_send(ssh)) != 0)
|
(r = sshpkt_send(ssh)) != 0)
|
||||||
sshpkt_fatal(ssh, r, "%s: exit reply", __func__);
|
sshpkt_fatal(ssh, r, "%s: exit reply", __func__);
|
||||||
|
xasprintf(¬e, "exit %d", WEXITSTATUS(status));
|
||||||
} else if (WIFSIGNALED(status)) {
|
} else if (WIFSIGNALED(status)) {
|
||||||
channel_request_start(ssh, s->chanid, "exit-signal", 0);
|
channel_request_start(ssh, s->chanid, "exit-signal", 0);
|
||||||
#ifndef WCOREDUMP
|
#ifndef WCOREDUMP
|
||||||
|
@ -2402,11 +2402,18 @@ session_exit_message(struct ssh *ssh, Session *s, int status)
|
||||||
(r = sshpkt_put_cstring(ssh, "")) != 0 ||
|
(r = sshpkt_put_cstring(ssh, "")) != 0 ||
|
||||||
(r = sshpkt_send(ssh)) != 0)
|
(r = sshpkt_send(ssh)) != 0)
|
||||||
sshpkt_fatal(ssh, r, "%s: exit reply", __func__);
|
sshpkt_fatal(ssh, r, "%s: exit reply", __func__);
|
||||||
|
xasprintf(¬e, "signal %d%s", WTERMSIG(status),
|
||||||
|
WCOREDUMP(status) ? " core dumped" : "");
|
||||||
} else {
|
} else {
|
||||||
/* Some weird exit cause. Just exit. */
|
/* Some weird exit cause. Just exit. */
|
||||||
ssh_packet_disconnect(ssh, "wait returned status %04x.", status);
|
ssh_packet_disconnect(ssh, "wait returned status %04x.",
|
||||||
|
status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
debug_f("session %d channel %d pid %ld %s", s->self, s->chanid,
|
||||||
|
(long)s->pid, note == NULL ? "UNKNOWN" : note);
|
||||||
|
free(note);
|
||||||
|
|
||||||
/* disconnect channel */
|
/* disconnect channel */
|
||||||
debug_f("release channel %d", s->chanid);
|
debug_f("release channel %d", s->chanid);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue