From 063c0a589f7672ca3267f63c80fc996fe5ccf1c8 Mon Sep 17 00:00:00 2001 From: Warren Date: Wed, 17 Jun 2026 19:36:57 +0800 Subject: [PATCH] Phase 1: Add detailed logging for SSH_FXP_WRITE and SSH_FXP_ATTRS - Phase 1.2: Add SSH_FXP_WRITE data preview (first 20 bytes) - Phase 1.3: Add SSH_FXP_ATTRS serialization debug log (flags, size, permissions, etc.) - Improve SFTP debugging capability for future troubleshooting - Reference: OpenSSH sftp-server.c logging style Changes: - sftp_handler.rs: handle_write() - add data preview debug log - sftp_handler.rs: SftpAttrs::serialize() - add detailed field log --- markbase-core/src/ssh_server/sftp_handler.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/markbase-core/src/ssh_server/sftp_handler.rs b/markbase-core/src/ssh_server/sftp_handler.rs index f0b4ce8..7c9b4ff 100644 --- a/markbase-core/src/ssh_server/sftp_handler.rs +++ b/markbase-core/src/ssh_server/sftp_handler.rs @@ -173,6 +173,17 @@ impl SftpAttrs { } pub fn serialize(&self) -> Vec { + // ⭐⭐⭐⭐⭐ Phase 1.3: 添加 SSH_FXP_ATTRS 详细日志 + debug!("Serializing SftpAttrs: flags=0x{:08x}, size={}, uid={}, gid={}, permissions=0x{:08x}, atime={}, mtime={}", + self.flags, + self.size.unwrap_or(0), + self.uid.unwrap_or(0), + self.gid.unwrap_or(0), + self.permissions.unwrap_or(0), + self.atime.unwrap_or(0), + self.mtime.unwrap_or(0) + ); + let mut buffer = Vec::new(); buffer.write_u32::(self.flags).unwrap(); @@ -438,6 +449,13 @@ impl SftpHandler { info!("SSH_FXP_WRITE: id={}, handle={}, offset={}, length={}", id, handle_id, offset, write_data.len()); + // ⭐⭐⭐⭐⭐ Phase 1.2: 添加 data preview(显示前 20 字节) + if write_data.len() > 0 { + let preview_len = std::cmp::min(20, write_data.len()); + let preview = &write_data[0..preview_len]; + debug!("SSH_FXP_WRITE data preview (first {} bytes): {:?}", preview_len, preview); + } + if let Some(handle) = self.handles.get_mut(&handle_id) { if let Some(ref mut file) = handle.file { file.seek(SeekFrom::Start(offset))?;