diff --git a/CHANGELOG.md b/CHANGELOG.md index b910157..9cc89ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ Released on FIXME: - SCP file transfer: - Added possibility to stat directories. - Bugfix: + - [Issue 18](https://github.com/veeso/termscp/issues/18): Set file transfer type to `Binary` for FTP - [Issue 17](https://github.com/veeso/termscp/issues/17) - SCP: fixed symlink not properly detected - [Issue 10](https://github.com/veeso/termscp/issues/10): Fixed port not being loaded from bookmarks into gui diff --git a/src/filetransfer/ftp_transfer.rs b/src/filetransfer/ftp_transfer.rs index cef0d15..ae9f0ea 100644 --- a/src/filetransfer/ftp_transfer.rs +++ b/src/filetransfer/ftp_transfer.rs @@ -38,7 +38,7 @@ use crate::utils::parser::{parse_datetime, parse_lstime}; // Includes use ftp4::native_tls::TlsConnector; -use ftp4::FtpStream; +use ftp4::{types::FileType, FtpStream}; use regex::Regex; use std::path::{Path, PathBuf}; use std::time::SystemTime; @@ -329,7 +329,7 @@ impl FileTransfer for FtpFileTransfer { Err(err) => { return Err(FileTransferError::new_ex( FileTransferErrorType::ConnectionError, - format!("{}", err), + err.to_string(), )) } }; @@ -344,7 +344,7 @@ impl FileTransfer for FtpFileTransfer { Err(err) => { return Err(FileTransferError::new_ex( FileTransferErrorType::SslError, - format!("{}", err), + err.to_string(), )) } }; @@ -353,7 +353,7 @@ impl FileTransfer for FtpFileTransfer { Err(err) => { return Err(FileTransferError::new_ex( FileTransferErrorType::SslError, - format!("{}", err), + err.to_string(), )) } }; @@ -370,7 +370,14 @@ impl FileTransfer for FtpFileTransfer { if let Err(err) = stream.login(username.as_str(), password.as_str()) { return Err(FileTransferError::new_ex( FileTransferErrorType::AuthenticationFailed, - format!("{}", err), + err.to_string(), + )); + } + // Initialize file type + if let Err(err) = stream.transfer_type(FileType::Binary) { + return Err(FileTransferError::new_ex( + FileTransferErrorType::ProtocolError, + err.to_string(), )); } // Set stream @@ -389,7 +396,7 @@ impl FileTransfer for FtpFileTransfer { Ok(_) => Ok(()), Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::ConnectionError, - format!("{}", err), + err.to_string(), )), }, None => Err(FileTransferError::new( @@ -415,7 +422,7 @@ impl FileTransfer for FtpFileTransfer { Ok(path) => Ok(PathBuf::from(path.as_str())), Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::ConnectionError, - format!("{}", err), + err.to_string(), )), }, None => Err(FileTransferError::new( @@ -435,7 +442,7 @@ impl FileTransfer for FtpFileTransfer { Ok(_) => Ok(dir), Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::ConnectionError, - format!("{}", err), + err.to_string(), )), }, None => Err(FileTransferError::new( @@ -475,7 +482,7 @@ impl FileTransfer for FtpFileTransfer { } Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::DirStatFailed, - format!("{}", err), + err.to_string(), )), }, None => Err(FileTransferError::new( @@ -494,7 +501,7 @@ impl FileTransfer for FtpFileTransfer { Ok(_) => Ok(()), Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::FileCreateDenied, - format!("{}", err), + err.to_string(), )), }, None => Err(FileTransferError::new( @@ -520,7 +527,7 @@ impl FileTransfer for FtpFileTransfer { Ok(_) => Ok(()), Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::PexError, - format!("{}", err), + err.to_string(), )), } } @@ -533,7 +540,7 @@ impl FileTransfer for FtpFileTransfer { if let Err(err) = self.remove(&file) { return Err(FileTransferError::new_ex( FileTransferErrorType::PexError, - format!("{}", err), + err.to_string(), )); } } @@ -542,13 +549,13 @@ impl FileTransfer for FtpFileTransfer { Ok(_) => Ok(()), Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::PexError, - format!("{}", err), + err.to_string(), )), } } Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::DirStatFailed, - format!("{}", err), + err.to_string(), )), } } @@ -581,7 +588,7 @@ impl FileTransfer for FtpFileTransfer { Ok(_) => Ok(()), Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::FileCreateDenied, - format!("{}", err), + err.to_string(), )), } } @@ -631,7 +638,7 @@ impl FileTransfer for FtpFileTransfer { Ok(writer) => Ok(Box::new(writer)), // NOTE: don't use BufWriter here, since already returned by the library Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::FileCreateDenied, - format!("{}", err), + err.to_string(), )), }, None => Err(FileTransferError::new( @@ -650,7 +657,7 @@ impl FileTransfer for FtpFileTransfer { Ok(reader) => Ok(Box::new(reader)), // NOTE: don't use BufReader here, since already returned by the library Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::NoSuchFileOrDirectory, - format!("{}", err), + err.to_string(), )), }, None => Err(FileTransferError::new( @@ -672,7 +679,7 @@ impl FileTransfer for FtpFileTransfer { Ok(_) => Ok(()), Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::ProtocolError, - format!("{}", err), + err.to_string(), )), }, None => Err(FileTransferError::new( @@ -694,7 +701,7 @@ impl FileTransfer for FtpFileTransfer { Ok(_) => Ok(()), Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::ProtocolError, - format!("{}", err), + err.to_string(), )), }, None => Err(FileTransferError::new( diff --git a/src/filetransfer/scp_transfer.rs b/src/filetransfer/scp_transfer.rs index 05d1de1..5de40a3 100644 --- a/src/filetransfer/scp_transfer.rs +++ b/src/filetransfer/scp_transfer.rs @@ -318,7 +318,7 @@ impl FileTransfer for ScpFileTransfer { Err(err) => { return Err(FileTransferError::new_ex( FileTransferErrorType::BadAddress, - format!("{}", err), + err.to_string(), )) } }; @@ -349,7 +349,7 @@ impl FileTransfer for ScpFileTransfer { Err(err) => { return Err(FileTransferError::new_ex( FileTransferErrorType::ConnectionError, - format!("{}", err), + err.to_string(), )) } }; @@ -359,7 +359,7 @@ impl FileTransfer for ScpFileTransfer { if let Err(err) = session.handshake() { return Err(FileTransferError::new_ex( FileTransferErrorType::ConnectionError, - format!("{}", err), + err.to_string(), )); } let username: String = match username { @@ -381,7 +381,7 @@ impl FileTransfer for ScpFileTransfer { ) { return Err(FileTransferError::new_ex( FileTransferErrorType::AuthenticationFailed, - format!("{}", err), + err.to_string(), )); } } @@ -393,7 +393,7 @@ impl FileTransfer for ScpFileTransfer { ) { return Err(FileTransferError::new_ex( FileTransferErrorType::AuthenticationFailed, - format!("{}", err), + err.to_string(), )); } } @@ -425,7 +425,7 @@ impl FileTransfer for ScpFileTransfer { } Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::ConnectionError, - format!("{}", err), + err.to_string(), )), } } @@ -495,7 +495,7 @@ impl FileTransfer for ScpFileTransfer { } Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::ProtocolError, - format!("{}", err), + err.to_string(), )), } } @@ -537,7 +537,7 @@ impl FileTransfer for ScpFileTransfer { } Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::ProtocolError, - format!("{}", err), + err.to_string(), )), } } @@ -576,7 +576,7 @@ impl FileTransfer for ScpFileTransfer { } Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::ProtocolError, - format!("{}", err), + err.to_string(), )), } } @@ -613,7 +613,7 @@ impl FileTransfer for ScpFileTransfer { } Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::ProtocolError, - format!("{}", err), + err.to_string(), )), } } @@ -650,7 +650,7 @@ impl FileTransfer for ScpFileTransfer { } Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::ProtocolError, - format!("{}", err), + err.to_string(), )), } } @@ -692,7 +692,7 @@ impl FileTransfer for ScpFileTransfer { } Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::ProtocolError, - format!("{}", err), + err.to_string(), )), } } @@ -743,7 +743,7 @@ impl FileTransfer for ScpFileTransfer { } Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::ProtocolError, - format!("{}", err), + err.to_string(), )), } } @@ -764,7 +764,7 @@ impl FileTransfer for ScpFileTransfer { Ok(output) => Ok(output), Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::ProtocolError, - format!("{}", err), + err.to_string(), )), } } @@ -823,7 +823,7 @@ impl FileTransfer for ScpFileTransfer { Ok(channel) => Ok(Box::new(BufWriter::with_capacity(65536, channel))), Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::ProtocolError, - format!("{}", err), + err.to_string(), )), } } @@ -846,7 +846,7 @@ impl FileTransfer for ScpFileTransfer { Ok(reader) => Ok(Box::new(BufReader::with_capacity(65536, reader.0))), Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::ProtocolError, - format!("{}", err), + err.to_string(), )), } } diff --git a/src/filetransfer/sftp_transfer.rs b/src/filetransfer/sftp_transfer.rs index e002a5b..2ad5947 100644 --- a/src/filetransfer/sftp_transfer.rs +++ b/src/filetransfer/sftp_transfer.rs @@ -76,12 +76,12 @@ impl SftpFileTransfer { Ok(_) => Ok(p), Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::NoSuchFileOrDirectory, - format!("{}", err), + err.to_string(), )), }, Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::NoSuchFileOrDirectory, - format!("{}", err), + err.to_string(), )), } } @@ -90,7 +90,7 @@ impl SftpFileTransfer { Ok(_) => Ok(p), Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::NoSuchFileOrDirectory, - format!("{}", err), + err.to_string(), )), }, Err(_) => Err(FileTransferError::new( @@ -260,7 +260,7 @@ impl FileTransfer for SftpFileTransfer { Err(err) => { return Err(FileTransferError::new_ex( FileTransferErrorType::BadAddress, - format!("{}", err), + err.to_string(), )) } }; @@ -291,7 +291,7 @@ impl FileTransfer for SftpFileTransfer { Err(err) => { return Err(FileTransferError::new_ex( FileTransferErrorType::ConnectionError, - format!("{}", err), + err.to_string(), )) } }; @@ -301,7 +301,7 @@ impl FileTransfer for SftpFileTransfer { if let Err(err) = session.handshake() { return Err(FileTransferError::new_ex( FileTransferErrorType::ConnectionError, - format!("{}", err), + err.to_string(), )); } let username: String = match username { @@ -323,7 +323,7 @@ impl FileTransfer for SftpFileTransfer { ) { return Err(FileTransferError::new_ex( FileTransferErrorType::AuthenticationFailed, - format!("{}", err), + err.to_string(), )); } } @@ -335,7 +335,7 @@ impl FileTransfer for SftpFileTransfer { ) { return Err(FileTransferError::new_ex( FileTransferErrorType::AuthenticationFailed, - format!("{}", err), + err.to_string(), )); } } @@ -348,7 +348,7 @@ impl FileTransfer for SftpFileTransfer { Err(err) => { return Err(FileTransferError::new_ex( FileTransferErrorType::ProtocolError, - format!("{}", err), + err.to_string(), )) } }; @@ -358,7 +358,7 @@ impl FileTransfer for SftpFileTransfer { Err(err) => { return Err(FileTransferError::new_ex( FileTransferErrorType::ProtocolError, - format!("{}", err), + err.to_string(), )) } }; @@ -386,7 +386,7 @@ impl FileTransfer for SftpFileTransfer { } Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::ConnectionError, - format!("{}", err), + err.to_string(), )), } } @@ -459,7 +459,7 @@ impl FileTransfer for SftpFileTransfer { match sftp.readdir(dir.as_path()) { Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::DirStatFailed, - format!("{}", err), + err.to_string(), )), Ok(files) => { // Allocate vector @@ -490,7 +490,7 @@ impl FileTransfer for SftpFileTransfer { Ok(_) => Ok(()), Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::FileCreateDenied, - format!("{}", err), + err.to_string(), )), } } @@ -517,7 +517,7 @@ impl FileTransfer for SftpFileTransfer { Ok(_) => Ok(()), Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::PexError, - format!("{}", err), + err.to_string(), )), } } @@ -538,7 +538,7 @@ impl FileTransfer for SftpFileTransfer { Ok(_) => Ok(()), Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::PexError, - format!("{}", err), + err.to_string(), )), } } @@ -562,7 +562,7 @@ impl FileTransfer for SftpFileTransfer { Ok(_) => Ok(()), Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::FileCreateDenied, - format!("{}", err), + err.to_string(), )), } } @@ -585,7 +585,7 @@ impl FileTransfer for SftpFileTransfer { Ok(metadata) => Ok(self.make_fsentry(dir.as_path(), &metadata)), Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::NoSuchFileOrDirectory, - format!("{}", err), + err.to_string(), )), } } @@ -604,7 +604,7 @@ impl FileTransfer for SftpFileTransfer { Ok(output) => Ok(output), Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::ProtocolError, - format!("{}", err), + err.to_string(), )), }, false => Err(FileTransferError::new( @@ -643,7 +643,7 @@ impl FileTransfer for SftpFileTransfer { Ok(file) => Ok(Box::new(BufWriter::with_capacity(65536, file))), Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::FileCreateDenied, - format!("{}", err), + err.to_string(), )), } } @@ -669,7 +669,7 @@ impl FileTransfer for SftpFileTransfer { Ok(file) => Ok(Box::new(BufReader::with_capacity(65536, file))), Err(err) => Err(FileTransferError::new_ex( FileTransferErrorType::NoSuchFileOrDirectory, - format!("{}", err), + err.to_string(), )), } }