blob: e526a367a5329b95bbeb98b26178027719cfe3b0 [file] [log] [blame]
extern crate libmount;
extern crate argparse;
extern crate env_logger;
#[macro_use] extern crate log;
use std::path::PathBuf;
use std::process::exit;
use argparse::{ArgumentParser, Parse, StoreTrue};
fn main() {
env_logger::init();
let mut path = PathBuf::new();
let mut bind = false;
let mut readonly = false;
let mut nodev = false;
let mut noexec = false;
let mut nosuid = false;
{
let mut ap = ArgumentParser::new();
ap.set_description("Remount utility. Similar to `mount -o remount` \
but keeps current mount point options");
ap.refer(&mut path).add_argument("path", Parse,
"Directory for remounting").required();
ap.refer(&mut bind).add_option(&["--bind"], StoreTrue,
"Set bind mount option");
ap.refer(&mut readonly).add_option(&["--readonly"], StoreTrue,
"Set readonly mount option");
ap.refer(&mut nodev).add_option(&["--nodev"], StoreTrue,
"Set nodev mount option");
ap.refer(&mut noexec).add_option(&["--noexec"], StoreTrue,
"Set noexec mount option");
ap.refer(&mut nosuid).add_option(&["--nosuid"], StoreTrue,
"Set nosuid mount option");
ap.parse_args_or_exit();
}
match libmount::Remount::new(path)
.bind(bind)
.readonly(readonly)
.nodev(nodev)
.noexec(noexec)
.nosuid(nosuid)
.remount()
{
Ok(()) => {}
Err(e) => {
error!("{}", e);
exit(1);
}
}
}