aboutsummaryrefslogtreecommitdiffstats
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs43
1 files changed, 25 insertions, 18 deletions
diff --git a/src/main.rs b/src/main.rs
index bf42706..fb5ac2f 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -13,9 +13,9 @@ mod configuration;
mod platform;
mod wireguard;
-use log;
+mod util;
-use daemonize::Daemonize;
+use log;
use std::env;
use std::process::exit;
@@ -62,14 +62,14 @@ fn main() {
let mut foreground = false;
let mut args = env::args();
- args.next(); // skip path (argv[0])
-
+ // skip path (argv[0])
+ args.next();
for arg in args {
match arg.as_str() {
"--foreground" | "-f" => {
foreground = true;
}
- "--root" => {
+ "--disable-drop-privileges" => {
drop_privileges = false;
}
dev => name = Some(dev.to_owned()),
@@ -97,16 +97,26 @@ fn main() {
exit(-3);
});
- // daemonize
+ // drop privileges
+ if drop_privileges {
+ match util::drop_privileges() {
+ Ok(_) => (),
+ Err(e) => {
+ eprintln!("Failed to drop privileges: {}", e);
+ exit(-4);
+ }
+ }
+ }
+
+ // daemonize to background
if !foreground {
- let daemonize = Daemonize::new()
- .pid_file(format!("/tmp/wireguard-rs-{}.pid", name))
- .chown_pid_file(true)
- .working_directory("/tmp")
- .user("nobody")
- .group("daemon")
- .umask(0o777);
- daemonize.start().expect("Failed to daemonize");
+ match util::daemonize() {
+ Ok(_) => (),
+ Err(e) => {
+ eprintln!("Failed to daemonize: {}", e);
+ exit(-5);
+ }
+ }
}
// start logging
@@ -114,10 +124,7 @@ fn main() {
.try_init()
.expect("Failed to initialize event logger");
- log::info!("starting {} wireguard device", name);
-
- // drop privileges
- if drop_privileges {}
+ log::info!("Starting {} WireGuard device.", name);
// start profiler (if enabled)
#[cfg(feature = "profiler")]