diff options
author | djm@openbsd.org <djm@openbsd.org> | 2023-08-11 01:05:48 +0200 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2023-08-11 01:12:59 +0200 |
commit | f9f18006678d2eac8b0c5a5dddf17ab7c50d1e9f (patch) | |
tree | 23824b30637f4c38f73e0a334459507141805744 /session.c | |
parent | upstream: drop a wayward comma, ok jmc@ (diff) | |
download | openssh-f9f18006678d2eac8b0c5a5dddf17ab7c50d1e9f.tar.xz openssh-f9f18006678d2eac8b0c5a5dddf17ab7c50d1e9f.zip |
upstream: better debug logging of sessions' exit status
OpenBSD-Commit-ID: 82237567fcd4098797cbdd17efa6ade08e1a36b0
Diffstat (limited to 'session.c')
-rw-r--r-- | session.c | 15 |
1 files changed, 11 insertions, 4 deletions
@@ -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 * All rights reserved @@ -2380,17 +2380,17 @@ session_exit_message(struct ssh *ssh, Session *s, int status) { Channel *c; int r; + char *note = NULL; if ((c = channel_lookup(ssh, s->chanid)) == NULL) 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)) { channel_request_start(ssh, s->chanid, "exit-status", 0); if ((r = sshpkt_put_u32(ssh, WEXITSTATUS(status))) != 0 || (r = sshpkt_send(ssh)) != 0) sshpkt_fatal(ssh, r, "%s: exit reply", __func__); + xasprintf(¬e, "exit %d", WEXITSTATUS(status)); } else if (WIFSIGNALED(status)) { channel_request_start(ssh, s->chanid, "exit-signal", 0); #ifndef WCOREDUMP @@ -2402,11 +2402,18 @@ session_exit_message(struct ssh *ssh, Session *s, int status) (r = sshpkt_put_cstring(ssh, "")) != 0 || (r = sshpkt_send(ssh)) != 0) sshpkt_fatal(ssh, r, "%s: exit reply", __func__); + xasprintf(¬e, "signal %d%s", WTERMSIG(status), + WCOREDUMP(status) ? " core dumped" : ""); } else { /* 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 */ debug_f("release channel %d", s->chanid); |