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
This commit is contained in:
@@ -173,6 +173,17 @@ impl SftpAttrs {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn serialize(&self) -> Vec<u8> {
|
pub fn serialize(&self) -> Vec<u8> {
|
||||||
|
// ⭐⭐⭐⭐⭐ 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();
|
let mut buffer = Vec::new();
|
||||||
|
|
||||||
buffer.write_u32::<BigEndian>(self.flags).unwrap();
|
buffer.write_u32::<BigEndian>(self.flags).unwrap();
|
||||||
@@ -438,6 +449,13 @@ impl SftpHandler {
|
|||||||
|
|
||||||
info!("SSH_FXP_WRITE: id={}, handle={}, offset={}, length={}", id, handle_id, offset, write_data.len());
|
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(handle) = self.handles.get_mut(&handle_id) {
|
||||||
if let Some(ref mut file) = handle.file {
|
if let Some(ref mut file) = handle.file {
|
||||||
file.seek(SeekFrom::Start(offset))?;
|
file.seek(SeekFrom::Start(offset))?;
|
||||||
|
|||||||
Reference in New Issue
Block a user