]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
upstream: better debug logging of sessions' exit status
authordjm@openbsd.org <djm@openbsd.org>
Thu, 10 Aug 2023 23:05:48 +0000 (23:05 +0000)
committerDamien Miller <djm@mindrot.org>
Thu, 10 Aug 2023 23:12:59 +0000 (09:12 +1000)
OpenBSD-Commit-ID: 82237567fcd4098797cbdd17efa6ade08e1a36b0

session.c

index 89dcfdab628cd7f9a6fd5503e38fae32272b7467..aa342e84de4c8c0b2d34ca5f5b96f542d15c212e 100644 (file)
--- a/session.c
+++ b/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
  *                    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(&note, "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(&note, "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);