80 lines
2.5 KiB
Rust
80 lines
2.5 KiB
Rust
use crate::utils::ensure_dir_exists;
|
|
use crate::{defs, sepolicy};
|
|
use anyhow::{Context, Result};
|
|
use std::path::Path;
|
|
|
|
pub fn set_sepolicy(pkg: String, policy: String) -> Result<()> {
|
|
ensure_dir_exists(defs::PROFILE_SELINUX_DIR)?;
|
|
let policy_file = Path::new(defs::PROFILE_SELINUX_DIR).join(pkg);
|
|
std::fs::write(&policy_file, policy)?;
|
|
sepolicy::apply_file(&policy_file)?;
|
|
Ok(())
|
|
}
|
|
|
|
pub fn get_sepolicy(pkg: String) -> Result<()> {
|
|
let policy_file = Path::new(defs::PROFILE_SELINUX_DIR).join(pkg);
|
|
let policy = std::fs::read_to_string(policy_file)?;
|
|
println!("{policy}");
|
|
Ok(())
|
|
}
|
|
|
|
// ksud doesn't guarteen the correctness of template, it just save
|
|
pub fn set_template(id: String, template: String) -> Result<()> {
|
|
ensure_dir_exists(defs::PROFILE_TEMPLATE_DIR)?;
|
|
let template_file = Path::new(defs::PROFILE_TEMPLATE_DIR).join(id);
|
|
std::fs::write(template_file, template)?;
|
|
Ok(())
|
|
}
|
|
|
|
pub fn get_template(id: String) -> Result<()> {
|
|
let template_file = Path::new(defs::PROFILE_TEMPLATE_DIR).join(id);
|
|
let template = std::fs::read_to_string(template_file)?;
|
|
println!("{template}");
|
|
Ok(())
|
|
}
|
|
|
|
pub fn delete_template(id: String) -> Result<()> {
|
|
let template_file = Path::new(defs::PROFILE_TEMPLATE_DIR).join(id);
|
|
std::fs::remove_file(template_file)?;
|
|
Ok(())
|
|
}
|
|
|
|
pub fn list_templates() -> Result<()> {
|
|
let templates = std::fs::read_dir(defs::PROFILE_TEMPLATE_DIR);
|
|
let Ok(templates) = templates else {
|
|
return Ok(());
|
|
};
|
|
for template in templates {
|
|
let template = template?;
|
|
let template = template.file_name();
|
|
if let Some(template) = template.to_str() {
|
|
println!("{template}");
|
|
};
|
|
}
|
|
Ok(())
|
|
}
|
|
|
|
pub fn apply_sepolies() -> Result<()> {
|
|
let path = Path::new(defs::PROFILE_SELINUX_DIR);
|
|
if !path.exists() {
|
|
log::info!("profile sepolicy dir not exists.");
|
|
return Ok(());
|
|
}
|
|
|
|
let sepolicies =
|
|
std::fs::read_dir(path).with_context(|| "profile sepolicy dir open failed.".to_string())?;
|
|
for sepolicy in sepolicies {
|
|
let Ok(sepolicy) = sepolicy else {
|
|
log::info!("profile sepolicy dir read failed.");
|
|
continue;
|
|
};
|
|
let sepolicy = sepolicy.path();
|
|
if sepolicy::apply_file(&sepolicy).is_ok() {
|
|
log::info!("profile sepolicy applied: {:?}", sepolicy);
|
|
} else {
|
|
log::info!("profile sepolicy apply failed: {:?}", sepolicy);
|
|
}
|
|
}
|
|
Ok(())
|
|
}
|