From ae328231a3407be765ba9586ffbc56dd8502040f Mon Sep 17 00:00:00 2001 From: Matt Johnston <matt@ucc.asn.au> Date: Sun, 11 Jun 2023 11:43:09 +0800 Subject: [PATCH] Fix wrong parsing of SSH_MSG_IGNORE This fixes PuTTY connecting. Also improve error printing --- embassy/demos/std/src/main.rs | 8 +++++--- src/conn.rs | 3 ++- src/packets.rs | 6 ++++-- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/embassy/demos/std/src/main.rs b/embassy/demos/std/src/main.rs index ccefa82..14bc8da 100644 --- a/embassy/demos/std/src/main.rs +++ b/embassy/demos/std/src/main.rs @@ -62,9 +62,11 @@ async fn main_task(spawner: Spawner) { // Launch network task spawner.spawn(net_task(stack)).unwrap(); - let config = &*singleton!( - SunsetMutex::new(SSHConfig::new().unwrap()) - ); + let config = &*singleton!( { + let mut config = SSHConfig::new().unwrap(); + // config.set_console_pw(Some("pw")).unwrap(); + SunsetMutex::new(config) + } ); for _ in 0..NUM_LISTENERS { spawner.spawn(listener(stack, config)).unwrap(); diff --git a/src/conn.rs b/src/conn.rs index ab41414..d8f236c 100644 --- a/src/conn.rs +++ b/src/conn.rs @@ -176,6 +176,7 @@ impl<C: CliBehaviour, S: ServBehaviour> Conn<C, S> { b: &mut Behaviour<'_, C, S>, ) -> Result<Dispatched, Error> { // Parse the packet + trace!("Received\n{:#?}", payload.hex_dump()); let r = sshwire::packet_from_bytes(payload, &self.parse_ctx); match r { @@ -186,7 +187,7 @@ impl<C: CliBehaviour, S: ServBehaviour> Conn<C, S> { Ok(Dispatched::default()) } Err(e) => { - trace!("Error decoding packet: {e} {:#?}", payload.hex_dump()); + error!("Error decoding packet: {e}"); return Err(e) } } diff --git a/src/packets.rs b/src/packets.rs index a5a16a3..7b1efd9 100644 --- a/src/packets.rs +++ b/src/packets.rs @@ -57,7 +57,9 @@ pub struct KexInit<'a> { pub struct NewKeys {} #[derive(Debug, SSHEncode, SSHDecode)] -pub struct Ignore {} +pub struct Ignore<'a> { + pub data: BinString<'a>, +} /// Named to avoid clashing with [`fmt::Debug`] #[derive(Debug, SSHEncode, SSHDecode)] @@ -950,7 +952,7 @@ pub enum Category { messagetypes![ (1, Disconnect, Disconnect<'a>, SSH_MSG_DISCONNECT, All), -(2, Ignore, Ignore, SSH_MSG_IGNORE, All), +(2, Ignore, Ignore<'a>, SSH_MSG_IGNORE, All), (3, Unimplemented, Unimplemented, SSH_MSG_UNIMPLEMENTED, All), (4, DebugPacket, DebugPacket<'a>, SSH_MSG_DEBUG, All), (5, ServiceRequest, ServiceRequest<'a>, SSH_MSG_SERVICE_REQUEST, Auth), -- GitLab