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:
parent
86d7d48a29
commit
673ba67f61
3 changed files with 34 additions and 3 deletions
|
|
@ -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() {
|
||||||
|
|
|
||||||
|
|
@ -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)?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue