feat: Added needed types to implement realpath.[
This commit is contained in:
parent
8dc05f5346
commit
83ab88f93e
@ -8,3 +8,4 @@ include = [ "lib/**/*.php" ]
|
|||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
regex = "1.1.9"
|
||||||
|
@ -1,2 +1,3 @@
|
|||||||
pub mod packet;
|
pub mod packet;
|
||||||
pub mod constants;
|
pub mod constants;
|
||||||
|
pub mod sftp;
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
pub mod data;
|
pub mod data;
|
||||||
pub mod header;
|
pub mod header;
|
||||||
|
pub mod types;
|
||||||
|
|
||||||
use crate::constants::SSH_FXP_INIT;
|
use crate::constants::SSH_FXP_INIT;
|
||||||
use crate::constants::SSH_FXP_VERSION;
|
use crate::constants::SSH_FXP_VERSION;
|
||||||
|
1
src/packet/types.rs
Normal file
1
src/packet/types.rs
Normal file
@ -0,0 +1 @@
|
|||||||
|
pub mod str;
|
23
src/packet/types/str.rs
Normal file
23
src/packet/types/str.rs
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
use regex::Regex;
|
||||||
|
use std::io::BufRead;
|
||||||
|
|
||||||
|
pub fn serialize(string_to_serialize: &str) -> Vec<u8> {
|
||||||
|
[string_to_serialize, "\0"].join("").as_bytes().to_vec()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn deserialize(bytes_to_deserialize: &[u8]) -> String {
|
||||||
|
Regex::new("\0$")
|
||||||
|
.expect("Unable to parse regex \\0$.")
|
||||||
|
.replace(
|
||||||
|
&String::from_utf8(bytes_to_deserialize.to_vec())
|
||||||
|
.expect("Get a utf-8 encoded ftp client."),
|
||||||
|
"",
|
||||||
|
)
|
||||||
|
.to_string()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_u8_array_c_string_from_u8_array(mut u8_array: &[u8]) -> Vec<u8> {
|
||||||
|
let mut return_array: Vec<u8> = Vec::new();
|
||||||
|
u8_array.read_until(0, &mut return_array).expect("Could not read string from u8_array");
|
||||||
|
return_array
|
||||||
|
}
|
29
src/sftp.rs
Normal file
29
src/sftp.rs
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
use regex::Regex;
|
||||||
|
|
||||||
|
pub fn realpath(path: &str) -> String {
|
||||||
|
let components: Vec<&str> = Regex::new("/+")
|
||||||
|
.expect("Error parsing regex /+.")
|
||||||
|
.split(path)
|
||||||
|
.collect();
|
||||||
|
let mut abs_path: Vec<&str> = Vec::new();
|
||||||
|
for component in components {
|
||||||
|
if (Regex::new("^\\.$")
|
||||||
|
.expect("Error parsing regex ^\\.$")
|
||||||
|
.is_match(component))
|
||||||
|
|| (Regex::new("^$")
|
||||||
|
.expect("Error parsing regex ^$.")
|
||||||
|
.is_match(component))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
} else if Regex::new("^\\.\\.$")
|
||||||
|
.expect("Error parsing regex ^\\.\\.$.")
|
||||||
|
.is_match(component)
|
||||||
|
{
|
||||||
|
abs_path.pop();
|
||||||
|
} else {
|
||||||
|
abs_path.push(component);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let abs_path: &str = &abs_path.join("/");
|
||||||
|
["/", abs_path].join("")
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user