12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- use std::fmt::Display;
- use nix::mount::{mount, MsFlags};
- use crate::log::logger;
- pub fn mount_sysfs() -> nix::Result<()>{
- let flag = MsFlags::MS_NODEV
- .union(MsFlags::MS_NOEXEC)
- .union(MsFlags::MS_NOSUID);
- mount(Some("sysfs"),"/sys",Some("sysfs"),flag, Some("nodev,noexec,nosuid"))
- }
- pub fn mount_proc() -> nix::Result<()>{
- let flag = MsFlags::MS_NODEV
- .union(MsFlags::MS_NOEXEC)
- .union(MsFlags::MS_NOSUID);
- mount(Some("proc"),"/proc",Some("proc"),flag, Some("nodev,noexec,nosuid"))
- }
- pub fn mount_devtmpfs<T1, T2>(target: &str, size: T1, mode: T2) -> nix::Result<()>
- where T1: Display, T2: Display
- {
- let flag = MsFlags::empty();
- let option = format!("size={}, mode={}", size, mode);
- mount(Some("udev"),target,Some("devtmpfs"),flag, Some(option.as_str()))
- }
- pub fn mount_runfs(opt: &str) -> nix::Result<()>
- {
- let flag = MsFlags::MS_NOSUID;
- //let flag = MsFlags::empty();
- let option = if opt.is_empty(){
- "".to_string()
- }else{
- format!("{}", opt)
- };
- mount(Some("tmpfs"),"/run",Some("tmpfs"),flag, Some(option.as_str()))
- }
- pub fn mount_custom(src: Option<&str>, target: &str, fstype: Option<&str>, opt: Option<&str>, flag: MsFlags) -> nix::Result<()>
- {
- mount(src, target,fstype,flag, opt)
- }
- pub fn move_mount(src: &str, target: &str) -> nix::Result<()>{
- let flag = MsFlags::MS_MOVE;
- mount(Some(src),target,None as Option<&str>,flag, Some("move"))
- }
- pub fn convert_flag_from_string_vec(flags: &Option<Vec<String>>, fsname: &str) -> MsFlags {
- let mut flag_val = MsFlags::empty();
- match flags {
- None => {
- flag_val
- }
- Some(flag_list) => {
- for fstr in flag_list {
- match fstr.as_str() {
- "bind" => { flag_val = flag_val.union(MsFlags::MS_REC) }
- "rbind" => {}
- "ro" => { flag_val = flag_val.union(MsFlags::MS_RDONLY) }
- "rw" => {}
- "nosuid" => { flag_val = flag_val.union(MsFlags::MS_NOSUID) }
- "suid" => {}
- "nodev" => { flag_val = flag_val.union(MsFlags::MS_NODEV) }
- "dev" => {}
- "noexec" => { flag_val = flag_val.union(MsFlags::MS_NOEXEC) }
- "exec" => {}
- "sync" => { flag_val = flag_val.union(MsFlags::MS_SYNCHRONOUS) }
- "async" => {}
- "noatime" => { flag_val = flag_val.union(MsFlags::MS_NOATIME) }
- "atime" => {}
- "realtime" => { flag_val = flag_val.union(MsFlags::MS_RELATIME) }
- "norealtime" => {}
- "nodiratime" => { flag_val = flag_val.union(MsFlags::MS_NODIRATIME) }
- "diratime" => {}
- "silent" => { flag_val = flag_val.union(MsFlags::MS_SILENT) }
- "loud" => {}
- "shared" => { flag_val = flag_val.union(MsFlags::MS_SHARED) }
- "rshared" => { flag_val = flag_val.union(MsFlags::MS_SHARED).union(MsFlags::MS_REC) }
- "slave" => { flag_val = flag_val.union(MsFlags::MS_SLAVE) }
- "rslave" => { flag_val = flag_val.union(MsFlags::MS_SLAVE).union(MsFlags::MS_REC) }
- "private" => { flag_val = flag_val.union(MsFlags::MS_PRIVATE) }
- "rprivate" => { flag_val = flag_val.union(MsFlags::MS_PRIVATE).union(MsFlags::MS_REC) }
- "unbindable" => { flag_val = flag_val.union(MsFlags::MS_UNBINDABLE) }
- "runbindable" => { flag_val = flag_val.union(MsFlags::MS_UNBINDABLE).union(MsFlags::MS_REC) }
- "remount" => { flag_val = flag_val.union(MsFlags::MS_REMOUNT) }
- "move" => { flag_val = flag_val.union(MsFlags::MS_MOVE) }
- _ => {
- logger().warn("mount", format!("unknown flag name '{}' for mounting '{}'", fstr, fsname).as_str());
- }
- }
- }
- flag_val
- }
- }
- }
|