From 49b0c859f92bb9474412933e450da26d0410fe08 Mon Sep 17 00:00:00 2001 From: Jakub Jelen Date: Mon, 18 Nov 2024 20:29:06 +0100 Subject: [PATCH] packet: Implement logging of SSH2_MSG_DEBUG message Signed-off-by: Jakub Jelen Reviewed-by: Andreas Schneider --- include/libssh/packet.h | 1 + src/packet.c | 4 ++-- src/packet_cb.c | 36 +++++++++++++++++++++++++++++++----- 3 files changed, 34 insertions(+), 7 deletions(-) diff --git a/include/libssh/packet.h b/include/libssh/packet.h index f0c8cb20..531d7e4b 100644 --- a/include/libssh/packet.h +++ b/include/libssh/packet.h @@ -58,6 +58,7 @@ extern "C" { SSH_PACKET_CALLBACK(ssh_packet_unimplemented); SSH_PACKET_CALLBACK(ssh_packet_disconnect_callback); SSH_PACKET_CALLBACK(ssh_packet_ignore_callback); +SSH_PACKET_CALLBACK(ssh_packet_debug_callback); SSH_PACKET_CALLBACK(ssh_packet_dh_reply); SSH_PACKET_CALLBACK(ssh_packet_newkeys); SSH_PACKET_CALLBACK(ssh_packet_service_accept); diff --git a/src/packet.c b/src/packet.c index 8508c731..ed9c13fb 100644 --- a/src/packet.c +++ b/src/packet.c @@ -52,9 +52,9 @@ static ssh_packet_callback default_packet_handlers[]= { ssh_packet_disconnect_callback, // SSH2_MSG_DISCONNECT 1 - ssh_packet_ignore_callback, // SSH2_MSG_IGNORE 2 + ssh_packet_ignore_callback, // SSH2_MSG_IGNORE 2 ssh_packet_unimplemented, // SSH2_MSG_UNIMPLEMENTED 3 - ssh_packet_ignore_callback, // SSH2_MSG_DEBUG 4 + ssh_packet_debug_callback, // SSH2_MSG_DEBUG 4 #if WITH_SERVER ssh_packet_service_request, // SSH2_MSG_SERVICE_REQUEST 5 #else diff --git a/src/packet_cb.c b/src/packet_cb.c index 2c19b588..54c94c84 100644 --- a/src/packet_cb.c +++ b/src/packet_cb.c @@ -92,7 +92,7 @@ SSH_PACKET_CALLBACK(ssh_packet_disconnect_callback) /** * @internal * - * @brief Handle a SSH_IGNORE and SSH_DEBUG packet. + * @brief Handle a SSH_IGNORE packet. */ SSH_PACKET_CALLBACK(ssh_packet_ignore_callback) { @@ -101,11 +101,37 @@ SSH_PACKET_CALLBACK(ssh_packet_ignore_callback) (void)type; (void)packet; - SSH_LOG(SSH_LOG_DEBUG, - "Received %s packet", - type == SSH2_MSG_IGNORE ? "SSH_MSG_IGNORE" : "SSH_MSG_DEBUG"); + SSH_LOG(SSH_LOG_DEBUG, "Received SSH_MSG_IGNORE packet"); + + return SSH_PACKET_USED; +} + +/** + * @internal + * + * @brief Handle a SSH_DEBUG packet. + */ +SSH_PACKET_CALLBACK(ssh_packet_debug_callback) +{ + uint8_t always_display = -1; + char *message = NULL; + int rc; + + (void)session; /* unused */ + (void)type; + (void)user; + + rc = ssh_buffer_unpack(packet, "bs", &always_display, &message); + if (rc != SSH_OK) { + SSH_LOG(SSH_LOG_PACKET, "Error reading debug message"); + return SSH_PACKET_USED; + } + SSH_LOG(SSH_LOG_DEBUG, + "Received SSH_MSG_DEBUG packet with message %s%s", + message, + always_display != 0 ? " (always display)" : ""); + SAFE_FREE(message); - /* TODO: handle a graceful disconnect */ return SSH_PACKET_USED; }