| 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); |
| } |
| } |
| } |