avoid running as root, compare underlying configs
This commit is contained in:
parent
d7a84d5471
commit
a50c9bffdb
4 changed files with 30 additions and 2 deletions
11
Cargo.lock
generated
11
Cargo.lock
generated
|
@ -1649,6 +1649,7 @@ dependencies = [
|
|||
"serde",
|
||||
"serde_derive",
|
||||
"toml",
|
||||
"users",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -1948,6 +1949,16 @@ dependencies = [
|
|||
"percent-encoding",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "users"
|
||||
version = "0.11.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "24cc0f6d6f267b73e5a2cadf007ba8f9bc39c6a6f9666f8cf25ea809a153b032"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"log",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "utf16_iter"
|
||||
version = "1.0.5"
|
||||
|
|
|
@ -9,3 +9,4 @@ gix = "0.70.0"
|
|||
serde = "1.0.217"
|
||||
serde_derive = "1.0.217"
|
||||
toml = "0.8.20"
|
||||
users = "0.11.0"
|
||||
|
|
|
@ -82,6 +82,7 @@ impl fmt::Display for ConfigFile {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(PartialEq)]
|
||||
#[derive(Deserialize)]
|
||||
pub struct Config {
|
||||
from: String,
|
||||
|
@ -92,11 +93,13 @@ pub struct Config {
|
|||
schedule: Schedule
|
||||
}
|
||||
|
||||
#[derive(PartialEq)]
|
||||
#[derive(Deserialize)]
|
||||
struct Git {
|
||||
ssh_identity_file: String,
|
||||
}
|
||||
|
||||
#[derive(PartialEq)]
|
||||
#[derive(Deserialize)]
|
||||
struct Schedule {
|
||||
enabled: bool,
|
||||
|
@ -135,13 +138,14 @@ pub fn read_config(paths: Vec<PathBuf>, refractr: &common::Refractr) -> Vec<Conf
|
|||
eprintln!("refractr: warning: skipping config file \"{}\" as it was already read", path.as_path().display());
|
||||
dup = true;
|
||||
break;
|
||||
} else if i.config == config_file.config {
|
||||
eprintln!("refractr: warning: config files \"{}\" and \"{}\" appear to have the same config", i.path, config_file.path);
|
||||
}
|
||||
}
|
||||
|
||||
if !dup {
|
||||
config_files.push(config_file);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return config_files;
|
||||
|
|
14
src/main.rs
14
src/main.rs
|
@ -4,6 +4,7 @@ mod config;
|
|||
use clap::Parser;
|
||||
use std::path::PathBuf;
|
||||
use std::process;
|
||||
use users;
|
||||
|
||||
#[derive(Parser)]
|
||||
#[command(name = "refractor")]
|
||||
|
@ -29,7 +30,7 @@ fn get_config_default() -> &'static str {
|
|||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
fn main() -> std::io::Result<()> {
|
||||
let args = Args::parse();
|
||||
let refractr = common::Refractr {
|
||||
verbose: args.verbose,
|
||||
|
@ -44,6 +45,15 @@ fn main() {
|
|||
let example = include_str!("example/config.toml");
|
||||
println!("{}", example);
|
||||
} else {
|
||||
// warn to avoid root/admin
|
||||
if refractr.unix {
|
||||
if users::get_current_uid() == 0 {
|
||||
eprintln!("refractr: warning: this program should not ran as root")
|
||||
}
|
||||
} else {
|
||||
// TODO: print message for Windows
|
||||
}
|
||||
|
||||
let cfgs = config::read_config(args.config, &refractr);
|
||||
if refractr.verbose >= 2 {
|
||||
// no need to loop over configs if verbose is not at the correct level
|
||||
|
@ -54,4 +64,6 @@ fn main() {
|
|||
|
||||
common::verbose(refractr.verbose, 1, format!("Config file(s) read successfully"));
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue