summaryrefslogtreecommitdiff
path: root/init/src/mounts/fstab.rs
diff options
context:
space:
mode:
Diffstat (limited to 'init/src/mounts/fstab.rs')
-rw-r--r--init/src/mounts/fstab.rs23
1 files changed, 23 insertions, 0 deletions
diff --git a/init/src/mounts/fstab.rs b/init/src/mounts/fstab.rs
index b8708e2..4d9b474 100644
--- a/init/src/mounts/fstab.rs
+++ b/init/src/mounts/fstab.rs
@@ -1,6 +1,8 @@
use crate::log::{log_critical_error, log_success, log_warning};
use libc::syscall;
use std::ffi::CString;
+use std::fs::{create_dir, metadata};
+use std::os::unix::fs::MetadataExt;
use std::{fmt, fs};
#[derive(Debug)]
@@ -114,7 +116,28 @@ impl FstabEntry {
Ok((flags, data))
}
+ fn check_mount_point_permissions(path: &str) -> Result<(), Box<dyn std::error::Error>> {
+ if !std::path::Path::new(path).exists() {
+ create_dir(path)?;
+ }
+
+ let meta = metadata(path)?;
+ if !meta.is_dir() {
+ return Err(format!("Mount point {} is not a directory", path).into());
+ }
+ let uid = meta.uid();
+ if uid != 0 {
+ log_warning(&format!("Warning: Mount point {} not owned by root", path));
+ }
+
+ Ok(())
+ }
+
pub fn mount(&self) -> Result<(), Box<dyn std::error::Error>> {
+ if let Err(e) = Self::check_mount_point_permissions(&self.mountpoint) {
+ log_warning(&format!("Permission check failed for {}: {}", self.mountpoint, e));
+ }
+
log_success(&format!(
"Started mounting {} from {}",
self.mountpoint, self.source