1
0
Fork 0
mirror of https://gitlab.redox-os.org/CoffeeCode/redox-ssh.git synced 2025-12-28 15:02:18 +01:00

Add verbose option to sshd

This commit is contained in:
Thomas Gatzweiler 2017-07-16 15:34:12 +02:00
parent 86d7d48a29
commit 673ba67f61
3 changed files with 34 additions and 3 deletions

View file

@ -1,4 +1,5 @@
extern crate ssh; extern crate ssh;
extern crate log;
use std::env; use std::env;
use std::fs::File; use std::fs::File;
@ -6,11 +7,28 @@ use std::io::{self, Write};
use std::process; use std::process;
use std::str::FromStr; use std::str::FromStr;
use log::{LogLevelFilter, LogMetadata, LogRecord};
use ssh::{Server, ServerConfig}; use ssh::{Server, ServerConfig};
use ssh::public_key::ED25519; use ssh::public_key::ED25519;
struct StdErrLogger;
impl log::Log for StdErrLogger {
fn enabled(&self, _: &LogMetadata) -> bool {
true
}
fn log(&self, record: &LogRecord) {
if self.enabled(record.metadata()) {
writeln!(io::stderr(), "{} - {}", record.level(), record.args())
.unwrap();
}
}
}
pub fn main() { pub fn main() {
let mut quiet = false; let mut verbose = false;
let key_pair = File::open("server.key").and_then( let key_pair = File::open("server.key").and_then(
|mut f| (ED25519.import)(&mut f), |mut f| (ED25519.import)(&mut f),
@ -32,7 +50,7 @@ pub fn main() {
while let Some(arg) = args.next() { while let Some(arg) = args.next() {
match arg.as_ref() match arg.as_ref()
{ {
"-q" => quiet = true, "-v" => verbose = true,
"-p" => { "-p" => {
config.port = config.port =
u16::from_str( u16::from_str(
@ -43,6 +61,13 @@ pub fn main() {
} }
} }
if verbose {
log::set_logger(|max_log_level| {
max_log_level.set(LogLevelFilter::Trace);
Box::new(StdErrLogger)
}).unwrap();
}
let server = Server::with_config(config); let server = Server::with_config(config);
if let Err(err) = server.run() { if let Err(err) = server.run() {

View file

@ -55,7 +55,7 @@ impl<W: Write> Connection<W> {
loop { loop {
let packet = Packet::read_from(&mut stream)?; let packet = Packet::read_from(&mut stream)?;
println!("packet: {:?}", packet); println!("packet: {:?}", packet);
self.process(&packet); self.process(&packet)?;
} }
} }

View file

@ -24,9 +24,13 @@ impl Packet {
pub fn read_from<R: io::Read>(stream: &mut R) -> Result<Packet> { pub fn read_from<R: io::Read>(stream: &mut R) -> Result<Packet> {
let mac_len = 0; let mac_len = 0;
trace!("Waiting for incoming packet...");
let packet_len = stream.read_u32::<BigEndian>()? as usize; let packet_len = stream.read_u32::<BigEndian>()? as usize;
trace!("Read incoming packet ({} bytes)", packet_len);
let padding_len = stream.read_u8()? as usize; let padding_len = stream.read_u8()? as usize;
let payload_len = packet_len - padding_len - 1; let payload_len = packet_len - padding_len - 1;
trace!("Padding: {} bytes", padding_len);
// TODO: Prevent packets that are too large // TODO: Prevent packets that are too large
@ -34,7 +38,9 @@ impl Packet {
let mut padding = Vec::with_capacity(padding_len); let mut padding = Vec::with_capacity(padding_len);
// let mut mac = Vec::with_capacity(mac_len); // let mut mac = Vec::with_capacity(mac_len);
trace!("Reading packet...");
stream.take(payload_len as u64).read_to_end(&mut payload)?; stream.take(payload_len as u64).read_to_end(&mut payload)?;
trace!("Reading payload...");
stream.take(padding_len as u64).read_to_end(&mut padding)?; stream.take(padding_len as u64).read_to_end(&mut padding)?;
// if mac_len > 0 { // if mac_len > 0 {