diff options
| author | Reiner Herrmann <reiner@reiner-h.de> | 2020-01-19 15:41:35 +0100 |
|---|---|---|
| committer | Reiner Herrmann <reiner@reiner-h.de> | 2020-01-19 15:41:35 +0100 |
| commit | 2823fd993f1f242d3238a552a1f4ef6c7c6f4403 (patch) | |
| tree | 6de2f085851105f490996bb94730c90338d18e3a /src/tftpd.rs | |
| parent | 544e5d2581aa85bd60b25673992deb3a704b1f7b (diff) | |
| parent | 55eecac67802301fcc74ffd06a37bc9bae85e5ef (diff) | |
Merge branch 'master' into debian
Diffstat (limited to 'src/tftpd.rs')
| -rw-r--r-- | src/tftpd.rs | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/tftpd.rs b/src/tftpd.rs index 6513367..f056a74 100644 --- a/src/tftpd.rs +++ b/src/tftpd.rs @@ -1,5 +1,5 @@ /* - * Copyright 2019 Reiner Herrmann <reiner@reiner-h.de> + * Copyright 2019-2020 Reiner Herrmann <reiner@reiner-h.de> * License: GPL-3+ */ @@ -63,6 +63,12 @@ impl Tftpd { } fn file_allowed(&self, filename: &Path) -> Option<PathBuf> { + if self.conf.dir == PathBuf::from("/") { + /* running either chrooted in requested directory, + or whole root is being served */ + return Some(filename.to_path_buf()); + } + /* get parent to check dir where file should be read/written */ let path = self.conf.dir.join(filename) .parent()? @@ -76,7 +82,7 @@ impl Tftpd { } } - fn handle_wrq(&mut self, socket: &UdpSocket, cl: &SocketAddr, buf: &[u8]) -> Result<(String), io::Error> { + fn handle_wrq(&mut self, socket: &UdpSocket, cl: &SocketAddr, buf: &[u8]) -> Result<String, io::Error> { let (filename, mode, mut options) = self.tftp.parse_file_mode_options(buf)?; self.tftp.init_tftp_options(&socket, &mut options)?; @@ -123,7 +129,7 @@ impl Tftpd { } } - fn handle_rrq(&mut self, socket: &UdpSocket, cl: &SocketAddr, buf: &[u8]) -> Result<(String), io::Error> { + fn handle_rrq(&mut self, socket: &UdpSocket, cl: &SocketAddr, buf: &[u8]) -> Result<String, io::Error> { let (filename, mode, mut options) = self.tftp.parse_file_mode_options(buf)?; self.tftp.init_tftp_options(&socket, &mut options)?; @@ -345,7 +351,7 @@ fn parse_commandline(args: &[String]) -> Option<Configuration> { usage(&opts, &program, Some(String::from("Only one of r (read-only) and w (write-only) allowed"))); return None; } - if matches.free.len() > 0 { + if !matches.free.is_empty() { conf.dir = Path::new(&matches.free[0]).to_path_buf(); } |
